如何通过单击从ListView获取特定项目?

时间:2013-10-20 22:25:24

标签: android listview onclicklistener onitemclicklistener

首先,我是android编程的初学者。所以不要太苛刻:P

无论如何,我有一个回收ListView,包含一个图像和每个列表项的文本。 让我们说有100种不同的物品。点击的每个项目都会引导我进入我的活动" DetailActivity.class"使用" detail_layout.xml"。现在我想根据点击的项目来配置这种布局。

TestActivity.java:

ArrayList<String> list = new ArrayList<String>();
for(int i = 0; i <= 99; i++) {
    list.add(detail_array[i]); 
    //detail_array[] contains Strings which are used to add Items to the list.
}
private ListView myList = (ListView)findViewById(R.id.list);
myList.setAdapter(new MyCustomAdapter(TestActivity.this,list));

MyCustomAdapter.java:

public class MyCustomAdapter extends BaseAdapter {

private ArrayList<String> mListItemsTV;
private LayoutInflater mLayoutInflater;

public View getView(int position, View view, ViewGroup viewGroup) {
    ViewHolder holder;
    if (view == null) {
        holder = new ViewHolder();
        view = mLayoutInflater.inflate(R.layout.list_item, null);
        holder.itemName = (TextView) view.findViewById(R.id.list_item_text_view);
        view.setTag(holder);
    } else {
        holder = (ViewHolder)view.getTag();
    }
    String stringItem = mListItemsTV.get(position);
    if (stringItem != null) {
        if (holder.itemName != null) {
            holder.itemName.setText(stringItem);
            ImageView imageView = (ImageView) view.findViewById(R.id.list_item_image_view);
            if(holder.itemName.getText() == "SomeName") {
                imageView.setImageResource(R.drawable.somedrawable);
            }
    return view;
}

说实话,我从某种教程中得到了那些,我想我知道那里发生了什么^^ 现在,我如何设法获取单击的项目?我用&#34; setOnClickListener&#34;尝试了几次。但它似乎永远不会起作用。我该如何使用它?我应该用这个吗?我在哪里必须使用它?

3 个答案:

答案 0 :(得分:0)

基本思想是listview通常是动态的,因此您将拥有一个您希望向监听器注册的arbatrary数量的项目的集合。除非您单独注册每个项目(不是一个好主意),否则Oclicklistener将无法工作。使用onitemclicklistener注册此链接应该有用的集合。 http://www.ezzylearning.com/tutorial.aspx?tid=1351248&q=handling-android-listview-onitemclick-event

答案 1 :(得分:0)

您将要使用setOnItemClickListener。这是一个如何使用它的例子。您需要根据代码进行调整。但是你可以看到如何引用列表中的单个项目。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

  @Override
  public void onItemClick(AdapterView<?> parent, final View view,
      int position, long id) {
    final String item = (String) parent.getItemAtPosition(position);
    view.animate().setDuration(2000).alpha(0)
        .withEndAction(new Runnable() {
          @Override
          public void run() {
            list.remove(item);
            adapter.notifyDataSetChanged();
            view.setAlpha(1);
          }
        });
  }

});

}

我回家后会修复格式。在移动ATM上。如果有人想编辑代码,请随意。

答案 2 :(得分:0)

如果您不想使用适配器,请尝试以下操作:

   @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    switch(position){
    /*
     * The case is the list position
     */
    case 0:

        break;
    case 1:

        break;
    }

}