ListFragment OnListItemClick 在使用 BaseAdapter 时不调用
ListFragment OnListItemClick Not Calling When Using BaseAdapter
我正在使用如下所示的自定义 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;
}
}
我的问题是当我想在我的 ListFragment
中使用 onListItemClick
方法时,它根本没有被调用:
@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);
}
然而,一旦我这样做,点击列表行就会完全停止工作。请有人给我一些指导,说明为什么在我使用自己的自定义 Adapter
时无法正确调用 onListItemClick
方法?
根据适配器的 getView()
方法,我看到列表项中有一个 CheckBox
。您需要向其添加 android:focusable="false"
(事实上,您需要对默认情况下可聚焦的任何控件执行此操作)。
我正在使用如下所示的自定义 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;
}
}
我的问题是当我想在我的 ListFragment
中使用 onListItemClick
方法时,它根本没有被调用:
@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);
}
然而,一旦我这样做,点击列表行就会完全停止工作。请有人给我一些指导,说明为什么在我使用自己的自定义 Adapter
时无法正确调用 onListItemClick
方法?
根据适配器的 getView()
方法,我看到列表项中有一个 CheckBox
。您需要向其添加 android:focusable="false"
(事实上,您需要对默认情况下可聚焦的任何控件执行此操作)。