我在android中有一个listview,它的适配器看起来像这样: mRecipes的类型为Recipe []。
Recipe[] mRecipes;
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
// set adapter and ListView
RecipeAdapter adapter = new RecipeAdapter(getActivity(),
R.layout.listview_item_row, mRecipes);
mListView = (ListView) getView().findViewById(R.id.lvMainDishes);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(this);
}
如您所见,我对列表中的每个项目都有一个custon XML视图。
我希望能够从OnItemClick
上的配方数组中获取Recipe对象public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// get the clicked recipe object here
}
任何想法? thnaks!
答案 0 :(得分:3)
如果您不希望拥有适配器实例变量,那么onItemClick
实现可能如下所示:
@Override
public void onItemClick(AdapterView <?> parent, View view, int position, long id) {
Recipe r = (Recipe) parent.getAdapter().getItem(position);
}
为了扩展佩德罗·奥利维拉所说的话,另一个标准成语是:
private RecipeAdapter mAdapter;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = new RecipeAdapter(getActivity(), R.layout.listview_item_row, mRecipes);
mListView = (ListView) getView().findViewById(R.id.lvMainDishes);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView <?> parent, View view, int position, long id) {
Recipe r = (Recipe) mAdapter.getItem(position);
}
如果在RecipeAdapter
中创建一个getter方法,则可以避免强制转换,例如:
public class RecipeAdapter extends BaseAdapter {
// Implementation
public Recipe get(int position) {
return mRecipe[position]; // or maybe mList.get(position);
}
}
然后,您的onItemClick
归结为:
@Override
public void onItemClick(AdapterView <?> parent, View view, int position, long id) {
Recipe r = mAdapter.get(position);
}
答案 1 :(得分:0)
您必须将mRecipes定义为全局变量。然后完成你的方法:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Recipe recipe = Recipe[position];
}