当我点击某个项目时,它不会运行我的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;
}
}
答案 0 :(得分:0)
得到了一些内容,CheckedTextView
正在窃取输入触摸,因此在Not focusable
xml
答案 1 :(得分:0)
问题是CheckedTextView
中ListView
的可聚焦性。您可以在CheckedTextView的布局中修复它android:focusable="false"
。
这会导致OnItemClick
被调用,但OnClickListener
上的CheckedTextView
未被调用,您必须自己处理已检查和未检查的状态。我对此感兴趣所以我做了一个样本。对它的解释可能比代码更长更复杂,所以这里是:
核心部分正在处理CheckedTextView
中的onItemClick
状态,并处理getView
末尾的状态,状态保存在BooleanSparseArray
中,该状态从{{更新1}}。
onItemClick