2015-05-24 20 views
2

我正在創建一個應用程序,該應用程序對於管理員用戶和普通用戶具有不同的屏幕。當管理員登錄時,將顯示由可擴展列表視圖組成的屏幕。 Expandable列表視圖標題是一個字符串數組。子項是從數據庫中獲得的值的列表。現在,請讓我知道如何在我的情況下使用可擴展列表視圖?因爲我有不同的子視圖列表,我應該使用很多適配器嗎?當我嘗試使用ExpandableListAdapter時,它告訴我要實現8種方法,如果是的話,我應該使用所有這些方法嗎?下面的代碼片段是什麼,我現在有:如何在以下場景中使用可擴展列表視圖

這是我的管理活動類:

import android.content.Context; 
import android.database.Cursor; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.SimpleCursorTreeAdapter; 

import java.util.List; 


public class AdminActivity extends AppCompatActivity { 

    Toolbar toolbar; 
    ExpandableListAdapter listAdapter; 
    List<String> titleText; 
    SQLiteDataBaseAdapter db; 

    ExpandableListView login, android, ios, testing, java, dotNet, os, hr, others; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_admin); 

     toolbar = (Toolbar) findViewById(R.id.appBar); 
     toolbar.setTitle(" Admin Screen"); 
     toolbar.setTitleTextColor(Color.WHITE); 

     login = (ExpandableListView) findViewById(R.id.expandableListViewLogin); 
     android = (ExpandableListView) findViewById(R.id.expandableListViewAndroid); 
     ios = (ExpandableListView) findViewById(R.id.expandableListViewIos); 
     testing = (ExpandableListView) findViewById(R.id.expandableListViewTesting); 
     java = (ExpandableListView) findViewById(R.id.expandableListViewJava); 
     dotNet = (ExpandableListView) findViewById(R.id.expandableListViewDotNet); 
     os = (ExpandableListView) findViewById(R.id.expandableListViewOS); 
     hr = (ExpandableListView) findViewById(R.id.expandableListViewHR); 
     others = (ExpandableListView) findViewById(R.id.expandableListViewOthers); 



// Lsit of values for header. One for each list view. 
     titleText.add("User Id Authentication"); 
     titleText.add("Android Posts Authentication"); 
     titleText.add("iOS Posts Authentication"); 
     titleText.add("Testing Posts Authentication"); 
     titleText.add("Java Posts Authentication"); 
     titleText.add("Dot Net Posts Authentication"); 
     titleText.add("OS Posts Authentication"); 
     titleText.add("HR Posts Authentication"); 
     titleText.add("Others Posts Authentication"); 




     SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this); 
     List<String> childData = db.getAndroidList(); 


     //setting the list adapter 
     listAdapter = new ExpandableListAdapter(this, titleText, childData);// this tells to implement some 8 methods, should I implement?? 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_admin, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

} 

我有一個屏幕那麼多的可擴展列表視圖的數組列表是頭一個爲每個可膨脹列表視圖中,孩子們將再次從數據庫中獲取值的列表。請讓我知道如何在我的情況下使用可擴展列表視圖。我對android非常陌生,這是我第一次使用Expandable列表視圖。所有建議都歡迎。提前致謝。

回答

0

你應該設置適配器:

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

    toolbar = (Toolbar) findViewById(R.id.appBar); 
    toolbar.setTitle(" Admin Screen"); 
    toolbar.setTitleTextColor(Color.WHITE); 

    login = (ExpandableListView) findViewById(R.id.expandableListViewLogin); 
    android = (ExpandableListView) findViewById(R.id.expandableListViewAndroid); 
    ios = (ExpandableListView) findViewById(R.id.expandableListViewIos); 
    testing = (ExpandableListView) findViewById(R.id.expandableListViewTesting); 
    java = (ExpandableListView) findViewById(R.id.expandableListViewJava); 
    dotNet = (ExpandableListView) findViewById(R.id.expandableListViewDotNet); 
    os = (ExpandableListView) findViewById(R.id.expandableListViewOS); 
    hr = (ExpandableListView) findViewById(R.id.expandableListViewHR); 
    others = (ExpandableListView) findViewById(R.id.expandableListViewOthers); 
    titleText.add("User Id Authentication"); 
    titleText.add("Android Posts Authentication"); 
    titleText.add("iOS Posts Authentication"); 
    titleText.add("Testing Posts Authentication"); 
    titleText.add("Java Posts Authentication"); 
    titleText.add("Dot Net Posts Authentication"); 
    titleText.add("OS Posts Authentication"); 
    titleText.add("HR Posts Authentication"); 
    titleText.add("Others Posts Authentication"); 
    SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this); 
    List<String> childData = db.getAndroidList(); 
    //setting the list adapter 
    listAdapter = new ExpandableListAdapter(this, titleText, childData); 
    ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView); 
    listView.setAdapter(listAdapter); 

}

+0

我試圖做到這一點,它要求我執行一些8種方法,我應該這樣做嗎?有沒有其他方法? – Keshav1234

0

enter image description here

**Its Working** 

package com.keshav.myexpandablelistviewexampleworkinginactivity; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ExpandableListView; 
import android.widget.ExpandableListView.OnChildClickListener; 
import android.widget.ExpandableListView.OnGroupClickListener; 
import android.widget.ExpandableListView.OnGroupCollapseListener; 
import android.widget.ExpandableListView.OnGroupExpandListener; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends Activity { 

    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // tODO get the listview 
     expListView = (ExpandableListView) findViewById(R.id.lvExp); 

     // TODO preparing list data 
     prepareListData(); 

     listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); 

     // setting list adapter 
     expListView.setAdapter(listAdapter); 

     // Listview Group click listener 
     expListView.setOnGroupClickListener(new OnGroupClickListener() { 

      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, 
             int groupPosition, long id) { 
       Toast.makeText(getApplicationContext(), 
         "Group Clicked " + listDataHeader.get(groupPosition), 
         Toast.LENGTH_SHORT).show(); 
       return false; 
      } 

     }); 

     // Listview Group expanded listener 
     expListView.setOnGroupExpandListener(new OnGroupExpandListener() { 

      // TODO Colapse Here Using this... in android 
      int previousGroup = -1; 
      boolean flag = false; 

      @Override 
      public void onGroupExpand(int groupPosition) { 

       Log.e("keshav", "onGroupClick is -> " + groupPosition); 

       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Expanded", 
         Toast.LENGTH_SHORT).show(); 

       if (groupPosition != previousGroup && flag) { 
        expListView.collapseGroup(previousGroup); 
       } 
       previousGroup = groupPosition; 

       flag = true; 

      } 
     }); 


     // Listview Group collasped listener 
     expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 

      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Collapsed", 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 


     // Todo Listview on child click listener 
     expListView.setOnChildClickListener(new OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 
       // TODO Auto-generated method stub 
       Toast.makeText(
         getApplicationContext(), 
         listDataHeader.get(groupPosition) 
           + " : " 
           + listDataChild.get(
           listDataHeader.get(groupPosition)).get(
           childPosition), Toast.LENGTH_SHORT) 
         .show(); 
       return false; 
      } 
     }); 
    } 

    /* 
    * Preparing the list data 
    */ 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("Months"); 
     listDataHeader.add("Top 250"); 
     listDataHeader.add("Now Showing"); 
     listDataHeader.add("Coming Soon.."); 


     // Adding child data 
     List<String> weeks = new ArrayList<String>(); 
     weeks.add("Sunday"); 
     weeks.add("Monday"); 
     weeks.add("Tuesday"); 
     weeks.add("Wednesday"); 
     weeks.add("Thursday"); 
     weeks.add("Friday"); 
     weeks.add("Saturday"); 


     // Adding child data 
     List<String> top250 = new ArrayList<String>(); 
     top250.add("Om Shanti Om"); 
     top250.add("Badshah"); 
     top250.add("Bahubali Part 1"); 
     top250.add("Carry on Jatta"); 
     top250.add("Sholey"); 
     top250.add("Mard"); 
     top250.add("Dewwar"); 


     List<String> nowShowing = new ArrayList<String>(); 
     nowShowing.add("Bahubali"); 
     nowShowing.add("Kabali"); 
     nowShowing.add("Luckky Di Unlukky Story"); 
     nowShowing.add("Sachin Billions Dream"); 
     nowShowing.add("Red 2"); 

     List<String> comingSoon = new ArrayList<String>(); 
     comingSoon.add("Tubelight "); 
     comingSoon.add("Bahubali 3 2018"); 
     comingSoon.add("Dhoom 4"); 
     comingSoon.add("Hindi Medium"); 

     listDataChild.put(listDataHeader.get(0), weeks); 
     listDataChild.put(listDataHeader.get(1), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(2), nowShowing); 
     listDataChild.put(listDataHeader.get(3), comingSoon); 
    } 
} 



package com.keshav.myexpandablelistviewexampleworkinginactivity; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ExpandableListView; 
import android.widget.ExpandableListView.OnChildClickListener; 
import android.widget.ExpandableListView.OnGroupClickListener; 
import android.widget.ExpandableListView.OnGroupCollapseListener; 
import android.widget.ExpandableListView.OnGroupExpandListener; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class MainActivity extends Activity { 

    ExpandableListAdapter listAdapter; 
    ExpandableListView expListView; 
    List<String> listDataHeader; 
    HashMap<String, List<String>> listDataChild; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // tODO get the listview 
     expListView = (ExpandableListView) findViewById(R.id.lvExp); 

     // TODO preparing list data 
     prepareListData(); 

     listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); 

     // setting list adapter 
     expListView.setAdapter(listAdapter); 

     // Listview Group click listener 
     expListView.setOnGroupClickListener(new OnGroupClickListener() { 

      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, 
             int groupPosition, long id) { 
       Toast.makeText(getApplicationContext(), 
         "Group Clicked " + listDataHeader.get(groupPosition), 
         Toast.LENGTH_SHORT).show(); 
       return false; 
      } 

     }); 

     // Listview Group expanded listener 
     expListView.setOnGroupExpandListener(new OnGroupExpandListener() { 

      // TODO Colapse Here Using this... in android 
      int previousGroup = -1; 
      boolean flag = false; 

      @Override 
      public void onGroupExpand(int groupPosition) { 

       Log.e("keshav", "onGroupClick is -> " + groupPosition); 

       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Expanded", 
         Toast.LENGTH_SHORT).show(); 

       if (groupPosition != previousGroup && flag) { 
        expListView.collapseGroup(previousGroup); 
       } 
       previousGroup = groupPosition; 

       flag = true; 

      } 
     }); 


     // Listview Group collasped listener 
     expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 

      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Toast.makeText(getApplicationContext(), 
         listDataHeader.get(groupPosition) + " Collapsed", 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 


     // Todo Listview on child click listener 
     expListView.setOnChildClickListener(new OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 
       // TODO Auto-generated method stub 
       Toast.makeText(
         getApplicationContext(), 
         listDataHeader.get(groupPosition) 
           + " : " 
           + listDataChild.get(
           listDataHeader.get(groupPosition)).get(
           childPosition), Toast.LENGTH_SHORT) 
         .show(); 
       return false; 
      } 
     }); 
    } 

    /* 
    * Preparing the list data 
    */ 
    private void prepareListData() { 
     listDataHeader = new ArrayList<String>(); 
     listDataChild = new HashMap<String, List<String>>(); 

     // Adding child data 
     listDataHeader.add("Months"); 
     listDataHeader.add("Top 250"); 
     listDataHeader.add("Now Showing"); 
     listDataHeader.add("Coming Soon.."); 


     // Adding child data 
     List<String> weeks = new ArrayList<String>(); 
     weeks.add("Sunday"); 
     weeks.add("Monday"); 
     weeks.add("Tuesday"); 
     weeks.add("Wednesday"); 
     weeks.add("Thursday"); 
     weeks.add("Friday"); 
     weeks.add("Saturday"); 


     // Adding child data 
     List<String> top250 = new ArrayList<String>(); 
     top250.add("Om Shanti Om"); 
     top250.add("Badshah"); 
     top250.add("Bahubali Part 1"); 
     top250.add("Carry on Jatta"); 
     top250.add("Sholey"); 
     top250.add("Mard"); 
     top250.add("Dewwar"); 


     List<String> nowShowing = new ArrayList<String>(); 
     nowShowing.add("Bahubali"); 
     nowShowing.add("Kabali"); 
     nowShowing.add("Luckky Di Unlukky Story"); 
     nowShowing.add("Sachin Billions Dream"); 
     nowShowing.add("Red 2"); 

     List<String> comingSoon = new ArrayList<String>(); 
     comingSoon.add("Tubelight "); 
     comingSoon.add("Bahubali 3 2018"); 
     comingSoon.add("Dhoom 4"); 
     comingSoon.add("Hindi Medium"); 

     listDataChild.put(listDataHeader.get(0), weeks); 
     listDataChild.put(listDataHeader.get(1), top250); // Header, Child data 
     listDataChild.put(listDataHeader.get(2), nowShowing); 
     listDataChild.put(listDataHeader.get(3), comingSoon); 
    } 
} 

activity_main.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#f4f4f4" > 

      <ExpandableListView 
       android:id="@+id/lvExp" 
       android:layout_height="match_parent" 
       android:layout_width="match_parent" 
       android:cacheColorHint="#00000000"/> 

</LinearLayout> 

list_group.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dp" 
    android:background="#000000"> 


    <TextView 
     android:id="@+id/lblListHeader" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft" 
     android:textSize="17dp" 
     android:textColor="#f9f93d" /> 

</LinearLayout> 


list_item.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="55dip" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/lblListItem" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="17dip" 
     android:paddingTop="5dp" 
     android:paddingBottom="5dp" 
     android:textColor="#000000" 
     android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" /> 

</LinearLayout>