0

我在对话框片段中有一个列表视图。列表视图工作正常,正在设置中onActivityCreated()。例如

SimpleAdapter adapter = new SimpleAdapter(getActivity(), list,
        R.layout.dialog_list_row, from, to);

mListView.setAdapter(adapter);

但是,我不明白为什么一旦我将adapter(如上所述)添加到我的listview中,为什么我不能访问孩子。例如

mListView.getChildAt(0).setEnabled(false);

我正在对 中的列表项执行此更改onResume()

4

3 回答 3

2

ListView Items 需要一些时间才能显示。您的代码在到达 onResume 方法后就会立即执行。

当 setEnabled(false); 在特定项目上调用您的 android 不知道您的 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);

    }
});
于 2012-11-23T09:27:58.677 回答
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,这是正确的方法。

于 2012-11-23T10:45:39.873 回答
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;
}

}
于 2012-11-23T09:28:23.683 回答