onListItemClick 不起作用...为什么?

onListItemClick doesnt work... Why?

我尝试教我列一个清单,其中包含一些片段。我现在已经创建了一个自定义数组适配器,使列表中的行适合我的应用程序。但是,当我按下该项目时没有任何反应。但是,复选框按预期工作 (?)

我做错了什么?

提前致谢

List_Fragment

public class List_Fragment extends ListFragment{

    ArrayList<Detail> items= new ArrayList<Detail>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View root = inflater.inflate(R.layout.list_layout, container, false);

        CustomAdapter adapter = new CustomAdapter(getActivity(), items);
        setListAdapter(adapter);

        return root;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Detail detail = items.get(position);
        Toast.makeText(getActivity(), detail.getTitle(), Toast.LENGTH_LONG).show();
    }

    public void setItems(ArrayList<Detail> items) {
        this.items = items;
    }
}

自定义适配器

@Override
public View getView(int position, View convertView, ViewGroup parent){


LayoutInflater theInflater = LayoutInflater.from(getContext());
View view = theInflater.inflate(R.layout.list_row, parent, false);

final Detail title = getItem(position);

TextView titleView = (TextView)view.findViewById(R.id.itemTitle);

titleView.setText(title.getTitle());

CheckBox chkbox = (CheckBox)view.findViewById(R.id.itemDone);

chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        title.setDone(true);
    }
});         

return view;

}

你的 OnListItemClicked() 和你的 OnCheckChangedListener 相互冲突。

我认为您需要在 CheckBox 上设置属性 android:focusable="false"。您可能还需要在 ListFragment 上调用 getListView().setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS)。请参阅 "onitemselected not working" 的其他 SO 问题,因为这方面存在差异。

我还注意到您的 setItems() 方法只是设置了您的成员变量,并没有更新适配器。

public void setItems(ArrayList<Detail> items) {
    // this.items = items;
    CustomAdapter adapter = (CustomAdapter) getListView().getAdapter();
    adapter.clear();
    adapter.addAll(items);
    adapter.notifyDataSetChanged();
}

这将使您的列表正确更新。

(把我原来的代码拿出来因为我忘了ArrayAdapterclear()add()insert()等方法所以你不需要扩展BaseAdapter.)