ListFragment OnListItemClick使用BaseAdapter时不调用

时间:2015-08-05 20:02:08

标签: android android-layout baseadapter android-listfragment

我正在使用下面的自定义Adapter,并且可以正常显示我的ListFragment中的数据:

public class CustomAdapter extends BaseAdapter {

    Context context;
    ArrayList<String> data;
    private static LayoutInflater inflater = null;

    public CustomAdapter(Context context, ArrayList<String> data) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.data = data;
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View vi = convertView;
        if (vi == null)
            vi = inflater.inflate(R.layout.custom_row, null);

        TextView textView = (TextView) vi.findViewById(R.id.textView);
        textView.setText(data.get(position));

        CheckBox checkBox = (CheckBox) vi.findViewById(R.id.checkBox);
        checkBox.setChecked(true);
        return vi;
    }
}

我的问题来自于我想在onListItemClick中使用ListFragment方法时,它根本就不会被调用:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Toast.makeText(getActivity(), "Position: " + position, Toast.LENGTH_SHORT).show();
}

但是我发现,如果我只使用普通的ArrayAdapter,我就不会遇到任何问题:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ArrayAdapter arrayAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data);
    setListAdapter(arrayAdapter);
}

虽然这根本不可行,因为我需要实现自定义布局文件,因此我想使用我的自定义Adapter

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    CustomAdapter adapter = new CustomAdapter(getActivity(), data);
    setListAdapter(adapter);
}

但是,只要我这样做,点击列表行就会完全停止工作。当我使用自己的自定义onListItemClick时,有人可以给我一些关于为什么Adapter方法没有被正确调用的指导吗?

1 个答案:

答案 0 :(得分:1)

根据适配器中的getView()方法,我看到列表项中有CheckBox。您需要向其添加android:focusable="false"(事实上,您需要对任何默认可聚焦的控件执行此操作。)