我有一个ViewProvider类的片段内容,它为其中一个片段返回一个ListView。 ListView具有扩展BaseAdapter类的自定义适配器。当我尝试实现一个项目点击侦听器时,它不起作用。我有听众的代码:ListView与自定义适配器,在片段内不会触发onItemClick事件
lv.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View vi, int pos,
long id) {
try {
Object o = lv.getItemAtPosition(pos);
Event obj_itemDetails = (Event) o;
Toast.makeText(context, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
Log.d("xxx", "output: "+obj_itemDetails.getName());
} catch(Exception e) {
Log.d(Log.TAG, "Something is wrong...");
}
}
});
...甚至没有例外发生。在同一个ViewProvider类中,我用SimpleAdapter添加了另一个列表,它工作得很好。我初始化列表相同:
EventAdapter sta = new EventAdapter(context, events);
final ListView lv = new ListView(context);
lv.setTextFilterEnabled(true);
lv.setAdapter(sta);
,另一种:
final ListView v = new ListView(context);
String[] from = new String[] { "str" };
int[] to = new int[] { android.R.id.text1 };
List<Map<String, String>> items = new ArrayList<Map<String, String>>();
for (int i = 0; i < 20; i++)...//set the items here
SimpleAdapter adapter = new SimpleAdapter(context, items,
android.R.layout.simple_list_item_1, from, to);
v.setAdapter(adapter);
我缺少什么,我应该在哪里看?
这里是我的EventAdapter:
public class EventAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<Event> items = new ArrayList<Event>();
Context ctx;
public EventAdapter(Context context, List<Event> items) {
mInflater = LayoutInflater.from(context);
this.items = items;
this.ctx = context;
}
public int getCount() {
return items.size();
}
public Event getItem(int position) {
return items.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final Event s = items.get(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.eventTitle);
holder.timestamp = (TextView) convertView.findViewById(R.id.eventTime);
holder.location = (TextView) convertView.findViewById(R.id.eventLocation);
holder.pic = (ImageView) convertView.findViewById(R.id.eventLogo);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(s.getName());
holder.timestamp.setText(s.getTimestamp());
holder.location.setText(s.getLocation());
if (s.getImage() != null) {
holder.pic.setImageBitmap(s.getImage());
} else {
// MY DEFAULT IMAGE
holder.pic.setImageResource(R.drawable.ic_launcher);
}
return convertView;
}
static class ViewHolder {
TextView name;
TextView timestamp;
TextView location;
ImageView pic;
}
}
根据我的知识你的参数应该是错的。为什么不通过实现onItemClickListener使用默认的onItemClick()方法?或者简单地使用lv.setOnItemClickListener(new OnItemClickListener(){}); – Maulik 2013-05-10 10:47:35
我试过这种方式,它也没有工作。 – 2013-05-10 11:02:47