android - 使用自定义项视图从listview获取项目

时间:2014-11-26 17:10:53

标签: android listview

我在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!

2 个答案:

答案 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];
}
相关问题