android - 许多阵列,一个 ListView ,一个适配器

标签 android android-listview android-arrayadapter

为了说明我的问题,我想用一个例子来解释

假设我们有 12 个数组,我们称它们为 List1 到 List12,每个数组都有不同的大小。

我想在一个屏幕中显示 3 个列表中的每一个 - 我有 4 个屏幕-,所以我为列表项创建了一个 xml 和一个扩展 ArrayAdapter 的新适配器 (MyAdapter)。我还通过使用 if 语句解决了在一个屏幕上显示它们的问题。

但是这 4 个屏幕有不同的大小,即使我控制了 ArrayIndexOutOfBoundsException 问题,列表中也有空行,因为我写了

MyAdapter<String> adapter = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, R.id.MyListView,
                List1)

我必须写 4 个适配器吗

MyAdapter<String> adapter1 = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, R.id.MyListView,
                List1)
MyAdapter<String> adapter2 = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, R.id.MyListView,
                List4)
MyAdapter<String> adapter3 = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, R.id.MyListView,
                List7)
MyAdapter<String> adapter4 = new MyAdapter<String>(this,
                android.R.layout.simple_list_item_1, R.id.MyListView,
                List10)

或者有更简单的解决方案吗?

感谢您的帮助!

我的适配器类:

public class MyAdapter<String> extends ArrayAdapter<String> {

        public MyAdapter(Context context, int resource, int textViewResourceId,
                String[] listname) {
            super(context, resource, textViewResourceId, listname);
        }

        public MyAdapter(MainActivity mainActivity, int simpleSpinnerItem,
                String[] listlist) {
            super(mainActivity, simpleSpinnerItem, listlist);
        }



        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.list_item, parent, false);

            TextView tv1 = (TextView) row.findViewById(R.id.textview1);
            TextView tv2 = (TextView) row.findViewById(R.id.textview2);
            TextView tv3 = (TextView) row.findViewById(R.id.textview3);
            if (ListID == 1) {
                tv1.setText(List1[position]);
                if (position < List3.length) {
                    tv2.setText(List2[position]);
                    tv3.setText(List3[position]);
                } else if (position < List2.length) {
                    tv2.setText(List4[position]);
                }
            } else if (ListID == 2) {
                       ...
            }

            else
                tv1.setText(list0[position]);
            return row;
        }
    }

列表长度 List1 > List2 > List3

两个构造函数只是因为我在屏幕上有一个微调器可以在屏幕之间移动。

ListID 是微调器的位置。

Padma Kumar 的解决方案是通过添加这个来实现的。我为 Spinner 使用了默认适配器,这解决了我的问题。

            @Override
    public int getCount() {
        if (ListID == 1) {
            return List1.length;
        } else if (ListID == 2) {
            return List4.length;
        } else if (ListID == 3) {
            return List7.length;
        } else if (ListID == 4) {
            return List10.length;
        }
    }

最佳答案

我认为您正在对 getcount 方法进行硬编码,使其如下所示。

public int getCount() {
        return list.size();
    }

它将返回您传递的列表中的长度数。

这样你就永远不会得到任何空行。

关于android - 许多阵列,一个 ListView ,一个适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913012/

相关文章:

android - 滚动到顶部将 ListView 项目移动到第二个位置

android - 检查字符串是否从我在 android 中的 View 中溢出?

Android:如果从数据库中删除超过 1 行,则具有多项选择 ListView 的应用程序会中断

android - 如何在可搜索微调器中使用 SearchView.OnQueryTextListener()?

android - 关闭导航操作模式

android - 正确布局android

带有 header 和正文的 Android Volley POST 请求

java - 如何动态添加项目到 ListView

java - 没有List类型参数的自定义ArrayAdapter

android - 在多平台项目中将用户图像存储为二进制数据与静态文件的性能影响?