我在对话框片段中有一个列表视图。列表视图工作正常,并在onActivityCreated()
中设置。 E.g。
SimpleAdapter adapter = new SimpleAdapter(getActivity(), list,
R.layout.dialog_list_row, from, to);
mListView.setAdapter(adapter);
但是,我不明白为什么一旦我将adapter
(如上所述)添加到我的listview
,为什么我无法访问这些孩子。 E.g。
mListView.getChildAt(0).setEnabled(false);
我正在对onResume()
中的列表项执行此更改。
答案 0 :(得分:2)
ListView项目需要时间才能显示。您的代码在点击onResume方法后立即执行。
当setEnabled(false);调用特定项目你的机器人不知道你的listView是否有任何孩子,因为它们没有被渲染。
尝试以下代码段。
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
listView.setSelection(0); //So your listview will bring first child in focus.
listView.getChildAt(0).setEnabled(false);
}
});
答案 1 :(得分:1)
因为子视图仅在ListView开始绘制后才出现,这发生在恢复之后。
也许您可以在返回视图之前扩展SimpleAdapter以对视图进行更改。 例如:
public static class MyAdapter extends SimpleAdapter{
public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v =super.getView(position, convertView, parent);
v.setEnabled(false);
return v;
}
}
答案 2 :(得分:1)
最简单的解决方案是快速扩展适配器以在isEnabled和areAllItemsEnabled中返回正确的值。
由于android中的视图回收,启用视图将无法正常工作。
一点代码:
public class DisableAdapter extends SimpleAdapter {
public DisableAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return position != 0;
}
}
这只是禁用列表的第一项。 AFAIK,这是正确的方法。