簡體   English   中英

如何在抽屜式布局中使用普通Listview實現可擴展列表視圖?

[英]How to implement Expandable List view with normal Listview in drawer layout?

嗨,我是新來的android,我試圖在抽屜布局中的列表視圖下面實現Expandable listview。我在同時使用liatview和Expandable listview時遇到問題,因為我無法將兩者都放在抽屜布局中

這是我的代碼acrivity_main

    <android.support.v4.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
  android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:fitsSystemWindows="true"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="dev.edmt.expandablelistview.MainActivity">

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
       <ExpandableListView
           android:id="@+id/lvExp"
           android:layout_height="match_parent"
           android:layout_width="250dp"
           android:layout_gravity="left"></ExpandableListView>

 </LinearLayout>

  <ListView
      android:divider="@null"
      android:background="#b9cae5"
      android:id="@+id/drawerList"
      android:layout_width="250dp"
      android:layout_gravity="left"
      android:layout_height="match_parent"/></android.support.v4.widget.DrawerLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
private ExpandableListView listView;
private ExpandableListAdapter listAdapter;
private List < String > listDataHeader;
private HashMap < String, List < String >> listHash;
ListView nlistView;
MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    nlistView = (ListView) findViewById(R.id.drawerList);
    myAdapter = new MyAdapter(this);
    nlistView.setAdapter(myAdapter);

    listView = (ExpandableListView) findViewById(R.id.lvExp);
    initData();
    listAdapter = new ExpandableListAdapter(this, listDataHeader, listHash);
    listView.setAdapter(listAdapter);
}

private void initData() {
    listDataHeader = new ArrayList < > ();
    listHash = new HashMap < > ();

    listDataHeader.add("Hello");
    List < String > edmtDev = new ArrayList < > ();
    edmtDev.add("This is Expandable ListView");
    listHash.put(listDataHeader.get(0), edmtDev);
}}

ExpandableListAdapter

public class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> listDataHeader;
private HashMap<String,List<String>> listHashMap;

public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listHashMap) {
    this.context = context;
    this.listDataHeader = listDataHeader;
    this.listHashMap = listHashMap;
}

@Override
public int getGroupCount() {
    return listDataHeader.size();
}

@Override
public int getChildrenCount(int i) {
    return listHashMap.get(listDataHeader.get(i)).size();
}

@Override
public Object getGroup(int i) {
    return listDataHeader.get(i);
}

@Override
public Object getChild(int i, int i1) {
    return listHashMap.get(listDataHeader.get(i)).get(i1); // i = Group Item , i1 = ChildItem
}

@Override
public long getGroupId(int i) {
    return i;
}

@Override
public long getChildId(int i, int i1) {
    return i1;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
    String headerTitle = (String)getGroup(i);
    if(view == null)
    {
        LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.list_group,null);
    }
    TextView lblListHeader = (TextView)view.findViewById(R.id.lblListHeader);
    lblListHeader.setTypeface(null, Typeface.BOLD);
    lblListHeader.setText(headerTitle);
    return view;
}

@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
    final String childText = (String)getChild(i,i1);
    if(view == null)
    {
        LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.list_item,null);
    }

    TextView txtListChild = (TextView)view.findViewById(R.id.lblListItem);
    txtListChild.setText(childText);
    return view;
}

@Override
public boolean isChildSelectable(int i, int i1) {
    return true;
}}

NormalListView適配器

public class MyAdapter extends BaseAdapter {
String[] avengers;
private Context context;
//integer array for the images

public MyAdapter(Context context) {
    //here initialize the array
    this.context = context;
    avengers = context.getResources().getStringArray(R.array.avengers);


}

@Override
public int getCount() {

    return avengers.length;
}

@Override
public Object getItem(int position) {
    //shud return a particular text at a given  position

    return avengers[position];
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    //in this method we are going to perfom all work that is needed t obe performed via the list view
    //perfomr all our work
    View row = null;
    if (view == null) { // if its null then we are creating this row for the first time

        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.custom_row, viewGroup, false);
        System.out.println("the row inflated is   " + row);

    } else {
        row = view;
    }
    TextView titleTextView = (TextView) row.findViewById(R.id.textView);
    titleTextView.setText(avengers[position]);





    return row;
}}

我無法用Normal ListView暗示可擴展Listview,但是通過實現2個listview在ListViews中實現了相同的效果。

這是FinalActivity.java我的主要Java文件

public class FinalActivity extends AppCompatActivity {
ListView listView, secondList;
String secondData[] = {
    "hello",
    "hi",
    "bye"
};
String data[] = {
    "Sunday",
    "Monday",
    "Tuesday"
};
ArrayAdapter < String > adapter, secondAdapter;
RelativeLayout layout;
public int a = 0;
DrawerLayout drawerLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_final);
    listView = (ListView) findViewById(R.id.listings);
    secondList = (ListView) findViewById(R.id.secondListings);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    adapter = new ArrayAdapter < String > (FinalActivity.this, android.R.layout.simple_list_item_1, data);
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView << ? > adapterView, View view, int position, long l) {
            System.out.println("the checked item is " + position);
            if (position == 2) {
                if (a == 0) {
                    secondList.setVisibility(View.VISIBLE);
                    secondAdapter = new ArrayAdapter < String > (FinalActivity.this, android.R.layout.simple_list_item_1, secondData);
                    secondList.setAdapter(secondAdapter);
                    a = 1;
                } else if (a == 1) {
                    secondList.setVisibility(View.GONE);
                    a = 0;
                }
                System.out.println("the value of a is  " + a);
            }
        }
    });
}

}

我的activity_main.xm

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer"
tools:context="com.example.user.loadmore.FinalActivity">
    <include layout="@layout/inclusion"/></android.support.v4.widget.DrawerLayout>

我的include.xml文件,其中包含兩個列表視圖

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_gravity="left"
android:layout_height="match_parent"
android:background="#b6bac1">
    <ListView
        android:id="@+id/listings"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        />
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/secondListings"
        android:layout_gravity="start"
        android:layout_below="@+id/listings"
        /></LinearLayout>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM