【问题标题】:How to handle 2 Listvews in one activity Android如何在一项 Android 活动中处理 2 个 Listvews
【发布时间】:2014-02-12 05:11:02
【问题描述】:

我在 1 个活动中创建了 2 个列表视图

例如:蔬菜

 Fruits

 Meat

因此,当您单击水果时,我希望所有 5 种水果都显示在第二个列表视图中。你能告诉我怎么做吗?我的代码如下所示

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listv);

    ListView menu= (ListView) findViewById(R.id.listView1);
    String items[]= {"Fruits","Vegetables","Jooses","Meat","Toys","Cookeys"};



ListView menu2= (ListView) findViewById(R.id.listView2);
    String subitems[]= {"xxx","xxx","xxx","xxx","xxx","xxx"};



    menu.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems));

}

【问题讨论】:

  • 您可以创建一个包含多列的列表视图。
  • @user3291365 这意味着我不必使用 2 个列表视图?实际上,我需要 2 个 ListVies,就像我在上面提到的那样。而且我也不想使用可扩展的列表视图。
  • @akunar :请接受对您有帮助的答案
  • @user2450263 我怎样才能使用二维数组呢?我正在为此使用开关。现在我想通过二维数组传递数据
  • 对于列表视图?自定义适配器...

标签: android android-intent android-listview


【解决方案1】:

在第一个listview的SetOnItemClick适配器中设置第二个listview的适配器:

menu.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, check which item is it and then set adapter and display values in 2nd listview

            }
        });  

参考:
http://matrix-examplecode.blogspot.in/2011/11/listview-example.html
http://www.mkyong.com/android/android-listview-example/
http://developer.android.com/reference/android/widget/AdapterView.html

【讨论】:

    【解决方案2】:
    ## -----lets try this simple code. this will suites your need-----##
    
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_listv);
    
    ListView menu= (ListView) findViewById(R.id.listView1);
    ListView menu2= (ListView) findViewById(R.id.listView2);
    String items[]= {"Fruits","Vegetables","Jooses","Meat","Toys","Cookeys"};
    String subitems1[]= {"xxx1","xxx","xxx","xxx","xxx","xxx"};
    String subitems2[]= {"xxx2","xxx","xxx","xxx","xxx","xxx"};
    String subitems3[]= {"xxx3","xxx","xxx","xxx","xxx","xxx"};
    String subitems4[]= {"xxx4","xxx","xxx","xxx","xxx","xxx"};
    String subitems5[]= {"xxx5","xxx","xxx","xxx","xxx","xxx"};
    menu.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
    // on item click listener
    menu.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
    
                    // get the selected values from listview 1
                    String val = items[arg2];
    
                    if(val.equalsIgnoreCase("Fruits"))
                    {
                    // set the second listview 2 
                    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems1));
                    }
                    else if(val.equalsIgnoreCase("Vegetables"))
                    {
                    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems2));
                    }
                    else if(val.equalsIgnoreCase("Jooses"))
                    {
                    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems3));
                    }
                    else if(val.equalsIgnoreCase("Meat"))
                    {
                    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems4));
                    }
                    else if(val.equalsIgnoreCase("Toys"))
                    {
                    menu2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, subitems5));
                    }
    
                }
    
        });
    

    }

    【讨论】:

      【解决方案3】:

      在菜单(Listview)上注册一个 onItemClickListener 回调。

      menu.setOnItemClickListener(new OnItemClickListener()
      {
        @Override
        public void onItemClick (AdapterView<?> parent, View view, int position,
            long id)
        {
          /* TODO: Update menu2 adapter items */
          /* Position - determines the item that is being clicked on your menu listview,
             by that. you can render your second adapter based on the item selected */
      
          /* Call adapter notifyDatasetChanged method to inform adapter that its data set
             has changed. */
          menu2Adapter.notifyDatasetChanged();
        }
      });
      

      或其他设计可能是。将您的第二个列表视图放在第二个活动上。每次你 选择一个项目。推送指向第二个列表视图的新活动..

      【讨论】:

        【解决方案4】:

        当您单击左侧列表视图中的项目时,将触发OnItemCLickListener。在回调中,更新第二个listview维护的底层数据,调用notifyDataSetChanged

        【讨论】:

          【解决方案5】:

          检查以下答案...我自己检查了此代码。可能是你想做的。

              ListView menu = (ListView) findViewById(R.id.listView1);
              String items[] = { "Fruits", "Vegetables", "Jooses", "Meat", "Toys", "Cookeys" };
          
              final ListView menu2 = (ListView) findViewById(R.id.listView2);
              final String subitems[] = { "xxx", "xxx", "xxx", "xxx", "xxx", "xxx" };
          
              menu.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
              menu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          
                  @Override
                  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
          
                      //Here YourActivity.this means the Context
                      menu2.setAdapter(new ArrayAdapter<String>(YourActivity.this,
                              android.R.layout.simple_list_item_1, subitems));
                  }
              });
          

          【讨论】:

            【解决方案6】:

            覆盖您的第一个列表视图(示例中的菜单)onItemClickListener 并根据您的需要准备子项(要在 menu2 中显示的列表) 或任何你想显示并调用 notifyDataSetChanged() menu2 适配器( menu2.getAdapter().notifyDataSetChanged(); )。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多