[英]ListView with custom adapter, inside a Fragment doesn't fire onItemClick event
我有一個Fragment內容的ViewProvider類,該類返回其中一個片段的ListView。 ListView具有擴展BaseAdapter類的自定義適配器。 當我嘗試實現項目單擊偵聽器時,它根本不起作用。 我為偵聽器提供了以下代碼:
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;
}
}
如果自定義列表行中有可聚焦的項目,則項目單擊偵聽器上的ListView不會觸發。也就是說,如果您有任何按鈕或進度條或任何獲得焦點的控件,onitemclick將不會觸發
我想建議您,Activity和Fragment幾乎相同,但是不同之處在於我們使用“ this”或“ ActivityName.this”的地方,我們必須將其替換為getActivity(),並使用使類布局誇大的視圖聲明變量:
確保您正在使用ListView通過ID查找這樣的視圖。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.yourlayoutfile, container,
false);
listView = (ListView) v
.findViewById(R.id.your_listview_id);
listView.setOnItemClickListener(YourFragmentClassName.this);
}
嘗試通過實現onItemClickListener來默認使用onItemClick偵聽器。
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
Log.d("OnItemClicked>>", "called");
}
希望對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.