如何在具有多重的ListView(S)活动设置滚动型?如何在、ListView

2023-09-12 05:58:13 作者:搜狗丶搜出一条狗

这是我的实际活动:

在这个活动我设置的所有的ListView(S)和动态编程。 正如你所看到的,这个问题我已经是第1 ListView控件需要她需要的地方 第二ListView中尽量保持显示通过在内部增加一个滚动条。

我只是想知道我怎么能说编程,让所有的ListView(S)取 整座她需要,只是一个滚动条添加到所有的活动(可以滚动菜单为例)?

Android开发ListView用的是BaseAdapter怎么在关闭有ListView的这个Activity时获得每个Item中的控件值

下面是我的活动,我的适配器:

 公共类SousBoissonsActivity延伸活动{
    私人字符串nom_categorie;
    私人的ArrayList<字符串> arraySousCategoriesName;
    私人的ArrayList< ArrayList的<饮料>> arraySousCategories;
    私人的ArrayList< MyAdapter> myAdapters;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_sousboissons_list_item);

        nom_categorie = getIntent()getStringExtra(nom_categorie);
        的setTitle(nom_categorie);
        DrinksContainer.setSousCategoriesNameArray(nom_categorie);
        DrinksContainer.setSousCategoriesArray(nom_categorie);

        arraySousCategories = DrinksContainer.sousCategoriesArray;
        myAdapters =新的ArrayList< MyAdapter>();

        新DoDirtyJobAsyncTask()执行()。
    }

    @覆盖
    保护无效onResume(){
        super.onResume();
    }

    @覆盖
    保护无效的onDestroy(){
        super.onDestroy();
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        返回super.onOptionsItemSelected(项目);
    }

    私有类DoDirtyJobAsyncTask扩展的AsyncTask<太虚,MyAdapter,太虚> {
        @覆盖
        保护无效doInBackground(虚空...... PARAMS){
            对于(ArrayList的<饮料> arrayElement:arraySousCategories){
                MyAdapter myAdapter =新MyAdapter(getApplicationContext()
                        arrayElement);
                myAdapters.add(myAdapter);
                publishProgress(myAdapter);
            }
            返回null;
        }

        @覆盖
        保护无效onProgressUpdate(MyAdapter ... myAdapters){
            INT currViewId = 1;
            的LinearLayout LL =(的LinearLayout)findViewById(R.id.sousboissons_linearlayout);
            对于(MyAdapter myAdapter:myAdapters){
                TextView的sousCategorieTitle =新的TextView(
                        getApplicationContext(),NULL);
                sousCategorieTitle.setText(myAdapter.sousCategory);

                sousCategorieTitle.setBackgroundColor(getResources()的getColor(
                        R.color.green));
                sousCategorieTitle.setTextSize(19);
                sousCategorieTitle.setTextColor(getResources()的getColor(
                        R.color.white));
                sousCategorieTitle.setGravity(Gravity.CENTER);
                LinearLayout.LayoutParams的LayoutParams =新LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.FILL_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                layoutParams.setMargins(0,0,0,0);
                sousCategorieTitle.setLayoutParams(的LayoutParams);

                ListView控件列表视图=新的ListView(getApplicationContext(),NULL);
                listview.setId(currViewId);
                listview.setAdapter(myAdapter);
                LinearLayout.LayoutParams layoutParams2 =新LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.FILL_PARENT,
                        LinearLayout.LayoutParams.FILL_PARENT);
                layoutParams2.setMargins(17,0,17,0);
                listview.setLayoutParams(layoutParams2);

                ll.setPadding(15,15,15,0);
                ll.addView(sousCategorieTitle);
                ll.addView(列表视图);
                currViewId ++;
            }
        }

    }

    类MyAdapter扩展ArrayAdapter<饮料> {
        LayoutInflater inflat;
        私人的ArrayList<饮料>项目;
        私人字符串sousCategory;

        公共MyAdapter(上下文的背景下,ArrayList的<饮料>对象){
            超(
                    的背景下,
                    R.layout.activity_sousboissons_list_item_elementsouscategorie,
                    对象);
            this.items =物体;
            this.inflat = LayoutInflater.from(上下文);
            this.sousCategory = objects.get(0).getType();
        }

        私有类ViewHolder {
            公共TextView的称号;
            公众的TextView大奖赛;
            公共TextView的说明;
            公共TextView的大小;
            公共ImageView的IMG;
            公众的LinearLayout LL;
        }

        @覆盖
        公共查看getView(INT位置,查看convertView,ViewGroup中父){
            字符串currentKey =;
            字符串keyDialog =;
            ViewHolder支架=无效;
            喝元= items.get(位置);

            //实例化标签和设计
            如果(convertView == NULL){
                持有人=新ViewHolder();
                convertView = inflat
                        。膨胀(
                                R.layout.activity_sousboissons_list_item_elementsouscategorie,
                                空值);

                holder.title =(TextView中)convertView
                        .findViewById(R.id.sousboissons_element_title);
                holder.desc =(TextView中)convertView
                        .findViewById(R.id.sousboissons_element_desc);
                holder.prix =(TextView中)convertView
                        .findViewById(R.id.sousboissons_element_prix);
                holder.size =(TextView中)convertView
                        .findViewById(R.id.sousboissons_element_size);

                如果(element.getPrice()的大小()→1){
                    holder.ll =(的LinearLayout)convertView
                            .findViewById(R.id.sousboissons_element_firt_layout);
                    holder.img =新ImageView的(getApplicationContext(),NULL);

                    LinearLayout.LayoutParams layoutParams1 =新LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams1.weight = 12;
                    holder.title.setLayoutParams(layoutParams1);

                    LinearLayout.LayoutParams layoutParams2 =新LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams2.gravity = Gravity.RIGHT;
                    layoutParams2.weight = 1;
                    holder.img.setLayoutParams(layoutParams2);
                    holder.img.setImageResource(R.drawable.arrow);
                    holder.img.setPadding(0,15,0,4);

                    //警告对话框
                    最后的LinearLayout alertDialogLayout =新的LinearLayout(
                            SousBoissonsActivity.this);
                    ArrayList的<字典> DICO = element.getPrice();
                    ListView控件清单当然=新的ListView(SousBoissonsActivity.this);
                    MyAdapterDialog适应=新MyAdapterDialog(
                            SousBoissonsActivity.this,element.getPrice());
                    liste.setAdapter(适应);
                    alertDialogLayout.addView(清单当然);
                    最后AlertDialog.Builder警报=新AlertDialog.Builder(
                            SousBoissonsActivity.this);
                    alert.setTitle(element.getName());
                    alert.setCancelable(真正的);
                    alert.setPositiveButton(传译,
                            新DialogInterface.OnClickListener(){
                                公共无效的onClick(DialogInterface对话框,
                                        INT编号){
                                    dialog.dismiss();
                                }
                            });
                    alert.setView(alertDialogLayout);

                    holder.img.setOnClickListener(新OnClickListener(){
                        @覆盖
                        公共无效的onClick(视图v){
                            如果(alertDialogLayout.getParent()!= NULL)
                                ((ViewGroup中)alertDialogLayout.getParent())
                                        .removeView(alertDialogLayout);
                            alert.show();
                        }
                    });
                    holder.ll.addView(holder.img);
                } 其他 {
                }
                convertView.setTag(保持器);
            } 其他 {
                支架=(ViewHolder)convertView.getTag();
            }

            //在标签上设定数据
            如果(元素!= NULL){
                holder.title.setText(element.getName());
                holder.desc.setText(element.getDescription());

                如果(element.getPrice()的大小()→1){
                    holder.prix.setVisibility(View.GONE);
                    holder.size.setVisibility(View.GONE);
                } 其他 {
                    。字典迪科= element.getPrice()得到(0);
                    枚举E = dico.keys();
                    而(e.hasMoreElements()){
                        currentKey =(字符串)e.nextElement();
                    }
                    如果(currentKey.equalsIgnoreCase(0)){
                        holder.size.setVisibility(View.GONE);
                        holder.prix
                                .setText((字符串)dico.get(currentKey)+€);
                    } 其他 {
                        holder.prix
                                .setText((字符串)dico.get(currentKey)+€);
                        holder.size.setText(currentKey +瘦肉精);
                    }
                }
            }
            返回convertView;
        }
    }
 

解决方案

您不能嵌套列表视图滚动型 Android将不知道哪个滚动。也许......你就可以编程设定固定高度每的ListView ,然后它会工作。

我会建议要么使用单一的ListView ,并且组在该列表中的所有数据,或使用的 ExpandableListView

This is my actual Activity :

In this Activity I set All the ListView(s) dynamically and programmatically. As you can see, the problem I have is The 1st ListView takes the place she needs and the second ListView try to keep showing by internally adding a scroll bar..

I just wanted to know how can I say programmatically to let all the ListView(s) take the entire place she needs and just add a ScrollBar to all the activity (To Scroll the Menu for example)?

Here is my Activity and my Adapter :

public class SousBoissonsActivity extends Activity {
    private String nom_categorie;
    private ArrayList<String> arraySousCategoriesName;
    private ArrayList<ArrayList<Drink>> arraySousCategories;
    private ArrayList<MyAdapter> myAdapters;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sousboissons_list_item);

        nom_categorie = getIntent().getStringExtra("nom_categorie");
        setTitle(nom_categorie);
        DrinksContainer.setSousCategoriesNameArray(nom_categorie);
        DrinksContainer.setSousCategoriesArray(nom_categorie);

        arraySousCategories = DrinksContainer.sousCategoriesArray;
        myAdapters = new ArrayList<MyAdapter>();

        new DoDirtyJobAsyncTask().execute();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

    private class DoDirtyJobAsyncTask extends AsyncTask<Void, MyAdapter, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            for (ArrayList<Drink> arrayElement : arraySousCategories) {
                MyAdapter myAdapter = new MyAdapter(getApplicationContext(),
                        arrayElement);
                myAdapters.add(myAdapter);
                publishProgress(myAdapter);
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(MyAdapter... myAdapters) {
            int currViewId = 1;
            LinearLayout ll = (LinearLayout) findViewById(R.id.sousboissons_linearlayout);
            for (MyAdapter myAdapter : myAdapters) {
                TextView sousCategorieTitle = new TextView(
                        getApplicationContext(), null);
                sousCategorieTitle.setText(myAdapter.sousCategory);

                sousCategorieTitle.setBackgroundColor(getResources().getColor(
                        R.color.green));
                sousCategorieTitle.setTextSize(19);
                sousCategorieTitle.setTextColor(getResources().getColor(
                        R.color.white));
                sousCategorieTitle.setGravity(Gravity.CENTER);
                LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.FILL_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                layoutParams.setMargins(0, 0, 0, 0);
                sousCategorieTitle.setLayoutParams(layoutParams);

                ListView listview = new ListView(getApplicationContext(), null);
                listview.setId(currViewId);
                listview.setAdapter(myAdapter);
                LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.FILL_PARENT,
                        LinearLayout.LayoutParams.FILL_PARENT);
                layoutParams2.setMargins(17, 0, 17, 0);
                listview.setLayoutParams(layoutParams2);

                ll.setPadding(15, 15, 15, 0);
                ll.addView(sousCategorieTitle);
                ll.addView(listview);
                currViewId++;
            }
        }

    }

    class MyAdapter extends ArrayAdapter<Drink> {
        LayoutInflater inflat;
        private ArrayList<Drink> items;
        private String sousCategory;

        public MyAdapter(Context context, ArrayList<Drink> objects) {
            super(
                    context,
                    R.layout.activity_sousboissons_list_item_elementsouscategorie,
                    objects);
            this.items = objects;
            this.inflat = LayoutInflater.from(context);
            this.sousCategory = objects.get(0).getType();
        }

        private class ViewHolder {
            public TextView title;
            public TextView prix;
            public TextView desc;
            public TextView size;
            public ImageView img;
            public LinearLayout ll;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            String currentKey = "";
            String keyDialog = "";
            ViewHolder holder = null;
            Drink element = items.get(position);

            // Instantiate Labels and Design
            if (convertView == null) {
                holder = new ViewHolder();
                convertView = inflat
                        .inflate(
                                R.layout.activity_sousboissons_list_item_elementsouscategorie,
                                null);

                holder.title = (TextView) convertView
                        .findViewById(R.id.sousboissons_element_title);
                holder.desc = (TextView) convertView
                        .findViewById(R.id.sousboissons_element_desc);
                holder.prix = (TextView) convertView
                        .findViewById(R.id.sousboissons_element_prix);
                holder.size = (TextView) convertView
                        .findViewById(R.id.sousboissons_element_size);

                if (element.getPrice().size() > 1) {
                    holder.ll = (LinearLayout) convertView
                            .findViewById(R.id.sousboissons_element_firt_layout);
                    holder.img = new ImageView(getApplicationContext(), null);

                    LinearLayout.LayoutParams layoutParams1 = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams1.weight = 12;
                    holder.title.setLayoutParams(layoutParams1);

                    LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
                            LinearLayout.LayoutParams.WRAP_CONTENT,
                            LinearLayout.LayoutParams.WRAP_CONTENT);
                    layoutParams2.gravity = Gravity.RIGHT;
                    layoutParams2.weight = 1;
                    holder.img.setLayoutParams(layoutParams2);
                    holder.img.setImageResource(R.drawable.arrow);
                    holder.img.setPadding(0, 15, 0, 4);

                    // Alert Dialog
                    final LinearLayout alertDialogLayout = new LinearLayout(
                            SousBoissonsActivity.this);
                    ArrayList<Dictionary> dico = element.getPrice();
                    ListView liste = new ListView(SousBoissonsActivity.this);
                    MyAdapterDialog adapt = new MyAdapterDialog(
                            SousBoissonsActivity.this, element.getPrice());
                    liste.setAdapter(adapt);
                    alertDialogLayout.addView(liste);
                    final AlertDialog.Builder alert = new AlertDialog.Builder(
                            SousBoissonsActivity.this);
                    alert.setTitle(element.getName());
                    alert.setCancelable(true);
                    alert.setPositiveButton("Retour",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.dismiss();
                                }
                            });
                    alert.setView(alertDialogLayout);

                    holder.img.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (alertDialogLayout.getParent() != null)
                                ((ViewGroup) alertDialogLayout.getParent())
                                        .removeView(alertDialogLayout);
                            alert.show();
                        }
                    });
                    holder.ll.addView(holder.img);
                } else {
                }
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            // Setting Data on Labels
            if (element != null) {
                holder.title.setText(element.getName());
                holder.desc.setText(element.getDescription());

                if (element.getPrice().size() > 1) {
                    holder.prix.setVisibility(View.GONE);
                    holder.size.setVisibility(View.GONE);
                } else {
                    Dictionary dico = element.getPrice().get(0);
                    Enumeration e = dico.keys();
                    while (e.hasMoreElements()) {
                        currentKey = (String) e.nextElement();
                    }
                    if (currentKey.equalsIgnoreCase("0")) {
                        holder.size.setVisibility(View.GONE);
                        holder.prix
                                .setText((String) dico.get(currentKey) + "€");
                    } else {
                        holder.prix
                                .setText((String) dico.get(currentKey) + "€");
                        holder.size.setText(currentKey + "cl");
                    }
                }
            }
            return convertView;
        }
    }

解决方案

You should not nest ListViews inside a ScrollView, Android won't know which to scroll. Maybe... you will be able to set programatically the fixed height for each ListView, and then it will work.

What I would recommend is either to use a single ListView, and group in that list all the data, or to use an ExpandableListView.