我已将ListView
放在另一个视图的顶部,我希望列表只显示一些不断变化的数据,并且用户不应该与列表进行任何交互。
列表的父视图上有一些按钮,我需要通过列表进行访问。
我在这里尝试了许多提议的解决方案,但它们都不适合我。
您可以看到我尝试的各种解决方案(解决方案组合)的评论。
任何建议???
延长ListView
:
public class ItemList extends ListView {
private MyListAdapater myListAdapater;
private Item[] items;
public ItemList(Context context, int rows) {
super(context);
items = new Item[rows];
for (int i = 0; i < items.length; i++) {
items[i] = new item(context, "Bla Bla Bla");
}
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT, Gravity.CENTER);
layoutParams.setMargins(pxToDp(8), 0, 0, pxToDp(12));
setLayoutParams(layoutParams);
myListAdapater = new MyListAdapater(context, items);
setAdapter(myListAdapater);
setDivider(null);
int rowMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
setDividerHeight(pxToDp(8));
setSelector(R.color.Transparent);
// setOnTouchListener(new OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// return false;
// }
// });
// setFocusable(false);
// setClickable(false);
// setFocusableInTouchMode(false);
// requestDisallowInterceptTouchEvent(true);
setSelection(myListAdapater.getCount() - 1);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
protected int pxToDp(int px) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, px, getResources().getDisplayMetrics());
}
// @Override
// public boolean onTouchEvent(MotionEvent event) {
// return true;
// }
}
列表适配器:
public class MyListAdapater extends BaseAdapter {
private Item[] listData;
private Context context;
public MyListAdapater(Context context, Item[] listData) {
this.Item = listData;
this.context = context;
}
@Override
public int getCount() {
return listData.length;
}
@Override
public Object getItem(int position) {
return listData[position];
}
@Override
public long getItemId(int position) {
return position;
}
// @Override
// public boolean isEnabled(int position) {
// return false;
// }
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = listData[position];
holder.item = (Item) convertView;
convertView.setTag(holder);
//convertView.setOnTouchListener(new View.OnTouchListener() {
// @Override
// public boolean onTouch(View v, MotionEvent event) {
// return true;
// }
//});
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
static class ViewHolder {
Item item;
}
}
谢谢
修改
我尝试在xml中添加列表但仍然无法点击列表后面的视图。
我尝试了一个具有以下布局的测试项目:
?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.listtest.MainActivity"
android:background="@color/Blue">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="click"
android:layout_gravity="center"
android:onClick="onClickTestButton"/>
<ListView
android:id="@+id/test_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="12dp"
android:layout_marginLeft="8dp"
android:divider="@drawable/divider"
android:dividerHeight="8dp"
android:listSelector="@color/Transparent"
android:stackFromBottom="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false" >
</ListView>
</FrameLayout>
并在活动中:
myListAdapter = new MyListAdapater(this, items);
testList = (ListView) findViewById(R.id.test_list);
testList.setAdapter(myListAdapter);
testList.setOnItemClickListener(null);
testList.setEnabled(false);
现在这个工作正常,我可以单击测试项目中列表后面的按钮,但是,当我在原始项目中执行相同的操作时,它不起作用。
任何人都可以指出为什么会发生这种情况???
谢谢