Akunar
Akunar

Reputation: 145

How to handle 2 Listvews in one activity Android

I have created 2 listviews in 1 Activity.

Eg:Vegetables

 Fruits

 Meat

So when you click on Fruits I want all the 5 Fruits available to show in the 2nd listView. Can you please tell me how to do this? My code is given below

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));

}

Upvotes: 0

Views: 91

Answers (6)

Hradesh Kumar
Hradesh Kumar

Reputation: 1805

Override your first listview(menu in your example) onItemClickListener and prepare subitems (list to display in menu2) according to your need or whatever you wants to display and call notifyDataSetChanged() on menu2 adapter ( menu2.getAdapter().notifyDataSetChanged(); ).

Upvotes: 0

Hamid Shatu
Hamid Shatu

Reputation: 9700

Check the following answer...I checked this code by myself. May be what you want to do.

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

Upvotes: 0

Bala Prasanna
Bala Prasanna

Reputation: 170

## -----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));
                }

            }

    });

}

Upvotes: 1

suitianshi
suitianshi

Reputation: 3340

when you click an item in the left listview, the OnItemCLickListener will be triggered. In the callback, update the underlying data maintained by the second listview and call notifyDataSetChanged.

Upvotes: 0

Keyfe Ang
Keyfe Ang

Reputation: 386

Register an onItemClickListener callback on menu (Listview).

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();
  }
});

Or other design may be. Put your 2nd listview on a second activity. every time you select an item. Push the new activity that points to the 2nd list view..

Upvotes: 0

Pararth
Pararth

Reputation: 8134

Set the adapter for the second listview in the SetOnItemClick adapter of first 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

            }
        });  

Refer:
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

Upvotes: 1

Related Questions