0

这是我的实际活动: 在此处输入图像描述

在此活动中,我以编程方式动态设置所有 ListView。如您所见,我遇到的问题是第一个 ListView 占据了她需要的位置,第二个 ListView 尝试通过在内部添加滚动条来继续显示..

我只是想知道如何以编程方式让所有 ListView(s) 占据她需要的整个位置,并为所有活动添加一个 ScrollBar(例如,滚动菜单)?

这是我的活动和适配器:

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;
        }
    }
4

2 回答 2

1

你不应该嵌套ListViews在 aScrollView中,Android 不知道要滚动哪个。也许......您将能够以编程方式为每个 设置固定高度ListView,然后它将起作用。

我建议要么使用单个ListView, 并在该列表中对所有数据进行分组,要么使用ExpandableListView.

于 2013-03-28T11:04:30.200 回答
1

ListView通常,添加inside是一种不好的做法ScrollView。如果你把你的ListView or any scrollable View inside theScrollView it won't work properly because when you touch the screen ,main focus of your touch is on parent view(ScrollView ) not the child View (ListView`)。

不过,如果您想实现它,那么下面是您可以尝试的方法,即FooterViewHeaderView您的ListView.

添加应该在上面的视图ListView作为标题:

    addHeaderView(View v);

和下面作为页脚:

    addFooterView(View v);

把所有应该放在上面ListView的东西放在下面HeaderListView和页脚一样放在下面。

LayoutInflater inflater = LayoutInflater.from(this);
mTop    = inflater.inflate(R.layout.view_top, null);
mBottom = inflater.inflate(R.layout.view_bottom, null);

list.addHeaderView(mTop);
list.addFooterView(mBottom);
// add header and footer before setting adapter
list.setAdapter(mAdapter);

结果,您将获得一个可滚动的视图。

于 2013-03-28T11:52:35.740 回答