【问题标题】:Custom adapter for 3 listviews3个列表视图的自定义适配器
【发布时间】:2016-07-24 15:13:06
【问题描述】:

我尝试创建的应用有问题。在过去的几天里我做了很多谷歌搜索,但我似乎无法弄清楚。

我们的目标是在一个活动上有一个可展开的列表视图,总共有 12 个选项。单击这 12 个选项中的每一个,都会将用户带到相同的布局,该布局具有 3 个选项卡(名为星期一、星期三、星期五)。每个选项卡都有一个列表视图。到目前为止,这一切都适用于我的应用程序。现在我希望我的自定义适配器使用不同的数据填充这 3 个列表视图(我计划将其硬编码到应用程序中,而不是大量数据,所以不要认为它会减慢速度),具体取决于可扩展列表视图上的项目被点击了。

我遇到的问题是,我不知道如何让自定义适配器知道单击了 Expandable ListView 上的哪个项目,并且我不知道如何获取该信息并填充三个不同的列表视图在具有三组不同数据的 3 个不同选项卡中..

数据非常直接,而且非常相似。每行将有 3 个文本框,一个包含一个单词,两个包含数字。它还会有一个复选框

我以前做过自定义适配器,但它们是针对单个列表视图的,而且我不必分离数据,所以要容易得多。我不知道如何开始这个,我在谷歌上搜索它的尝试都是空的。

非常感谢任何帮助,即使只是一个指向正确方向的链接也会很棒!谢谢!

【问题讨论】:

    标签: android android-arrayadapter android-adapter custom-adapter android-tablayout


    【解决方案1】:

    使用 (TabLayout + ViewPager) 组合为 3 个选项卡创建 3 个不同的片段。
    然后在有权访问此TabLayout 和ViewPager 的Activity 中调用它,然后使用自定义列表视图动态添加选项卡。好了,一个简单的解决方案。

    【讨论】:

      【解决方案2】:

      您可以使用相同的CustomAdapter 来填充您想要的任何数据。因此,您可以在对象创建期间动态设置数据,而不是硬编码 CustomAdapter 中的数据。

      这样,当您创建Adapter 时,您将传递它必须处理的数据。由于您的 Activity 知道单击了哪个可扩展列表项,因此您可以向适配器发送不同的数据。

      public class MyCustomAdapter extends BaseAdapter {
          private String [] dataToBePopulated;
      
          public MyCustomAdapter(String [] data) {
              dataToBePopulated = data;
          }
      
          @Override
          public int getCount() {
              return dataToBePopulated != null ? dataToBePopulated.lenght : 0;
          }
      
          // ETC..
      }
      

      然后,当您创建适配器时,您可以发送您想要的数据,例如:

      public class MainActivity extends Activity {
      
          @Override
          protected void onCreate(Bundle arg0) {
              super.onCreate(arg0);
      
              ....
      
              ListView listView = (ListView) findViewById(R.id.ID_OF_LISTVIEW);
              MyCustomAdapter listViewAdapter;
              if(/* CONDITION 1 */) {
                  listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 1", "Data2 for Condition 1", "Data3 for Condition 1"})
              } else if (/* CONDITION 2 */) {
                  listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 2", "Data2 for Condition 2"})
              } else {
                  listViewAdapter = new MyCustomAdapter(new String[] {"Data1 for Condition 3"})
              }
      
              listView.setAdapter(listViewAdapter);
      
              ....            
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多