【发布时间】:2018-03-23 22:14:45
【问题描述】:
您好,我是 android 新手,我正在尝试在抽屉布局中的列表视图下方实现可扩展列表视图。同时使用 liatview 和可扩展列表视图时遇到问题,因为我无法将两者都放在抽屉布局中
这是我的代码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;
}}
【问题讨论】:
标签: android listview expandablelistview drawerlayout expandablelistadapter