我实际上使用的是嵌套列表视图。父列表视图带有自定义适配器和子列表视图。
我知道我可以使用expandable list view
. 但是在我的场景中,子项目处理起来更复杂。有很多组件。
这是我尝试过的,单击父列表中的按钮会显示相应的子列表项。这工作正常。但唯一的问题是滚动。我想滚动子列表,但父列表正在滚动。我为父母尝试了两者setScrollContainer(false)
和setClickable(false)
(只是尝试过),但没有用。
这是我的代码。
activity_main.xml
<RelativeLayout
android:id="@+id/parent_rel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin" >
<Button
android:id="@+id/b_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:text="View" />
<TextView
android:id="@+id/parent_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/b_view"
android:layout_alignBottom="@+id/b_view"
android:layout_alignParentLeft="true"
android:layout_marginLeft="96dp"
android:text="TextView" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/child_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/parent_rel"
android:layout_below="@+id/parent_rel"
android:visibility="gone" >
<ListView
android:id="@+id/ch_listView"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#000000" >
</ListView>
</RelativeLayout>
MainActivity.java
公共类 MainActivity 扩展 ListActivity {
ListView lv;
String[] prnt_items = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
boolean isViewing = false;
RelativeLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lv = getListView();
lv.setCacheColorHint(Color.parseColor("#00000000"));
lv.setAdapter(new ParentItems());
}
class ParentItems extends BaseAdapter {
@Override
public int getCount() {
return prnt_items.length;
}
@Override
public Object getItem(int position) {
return prnt_items[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View p_v = getLayoutInflater().inflate(
R.layout.activity_main, parent, false);
TextView tv = (TextView) p_v.findViewById(R.id.parent_txt);
tv.setText(prnt_items[position]);
Button sub_view = (Button) p_v.findViewById(R.id.b_view);
sub_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isViewing) {
lv.setScrollContainer(false);
//lv.setClickable(false);
isViewing = !isViewing;
layout = (RelativeLayout) p_v.findViewById(R.id.child_view);
layout.setVisibility(View.VISIBLE);
ListView c_lv = (ListView) p_v.findViewById(R.id.ch_listView);
c_lv.setAdapter(new ArrayAdapter<String>(
getApplicationContext(),
android.R.layout.simple_list_item_1,
new String[] { "Hello", "Hai", "Oops!!!" }));
c_lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0,View arg1, int arg2, long arg3) {
Toast.makeText(getApplicationContext(),
"Click @ " + arg2, Toast.LENGTH_SHORT)
.show();
}
});
}
else{
if(layout !=null){
isViewing = !isViewing;
lv.setScrollContainer(true);
//lv.setClickable(true);
layout.setVisibility(View.GONE);
}
}
}
});
return p_v;
}
}
}
感谢您的帮助。
谢谢。