onListClickItem没有响应任何东西

时间:2013-12-16 17:41:24

标签: android listview

当我点击某个项目时,它不会运行我的onListItemClick代码,我不知道为什么!

我有一个使用此代码扩展listFragment的片段。这是在onCreateView()

{
adapter = new CustomArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_multiple_choice, names);
        setListAdapter(adapter);
}


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

    CheckedTextView check = (CheckedTextView) v;

    if (check.isChecked()){
        selections.remove((Integer) position);
    }
    else{
        selections.add((Integer) position);
    }

    //DOESNT RUN THIS

}

这是我的自定义适配器

package project.android.bellringing;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;

public class CustomArrayAdapter<T> extends ArrayAdapter<String> {

private ArrayList<Boolean> bitset = new ArrayList<Boolean>();
private ArrayList<String> names;

public CustomArrayAdapter(Context context, int textViewResourceId){
    super(context, textViewResourceId);
}


public CustomArrayAdapter(Activity a, int textViewResourceId, ArrayList<String> entries) {      
    super(a, textViewResourceId, entries);

    for (int i = 0; i < entries.size(); i++){
        bitset.add(i, false);
    }

    names = new ArrayList<String>(entries);
}

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

     CheckedTextView c;

    if (convertView == null) {

        LayoutInflater vi = LayoutInflater.from(getContext());
         c = (CheckedTextView) vi.inflate(android.R.layout.simple_list_item_multiple_choice, null);

    }
    else{
        c = (CheckedTextView) convertView;
    }

    final CheckedTextView ctv = c;
    ctv.setText(names.get(position));

    if (bitset.get(position) == false)
        ctv.setChecked(false);
    else
        ctv.setChecked(true);

    ctv.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            ctv.setChecked(!ctv.isChecked());

            if (bitset.get(position) == false)
                bitset.set(position, true);
            else
                bitset.set(position, false);
        }

    });


    return ctv;
}

}

2 个答案:

答案 0 :(得分:0)

得到了一些内容,CheckedTextView正在窃取输入触摸,因此在Not focusable

中将其定义为xml

答案 1 :(得分:0)

问题是CheckedTextViewListView的可聚焦性。您可以在CheckedTextView的布局中修复它android:focusable="false"

这会导致OnItemClick被调用,但OnClickListener上的CheckedTextView未被调用,您必须自己处理已检查和未检查的状态。我对此感兴趣所以我做了一个样本。对它的解释可能比代码更长更复杂,所以这里是:

核心部分正在处理CheckedTextView中的onItemClick状态,并处理getView末尾的状态,状态保存在BooleanSparseArray中,该状态从{{更新1}}。

onItemClick