【问题标题】:How to set OnitemClick in custom listview如何在自定义列表视图中设置 OnitemClick
【发布时间】:2013-03-11 11:12:34
【问题描述】:

我使用扩展基本适配器的列表视图适配器创建了一个列表视图。

它工作正常。但是我需要将 onitemClick 侦听器添加到 listview,当我单击一个列表项时,它会与 listitem 一起转到另一个活动。我们该怎么做?

这是我在列表视图适配器中的代码

public class listviewAdapter extends BaseAdapter{
    String FIRST_COLUMN = Constant.FIRST_COLUMN;
    String SECOND_COLUMN = Constant.SECOND_COLUMN;
    String THIRD_COLUMN = Constant.THIRD_COLUMN;
    String FOURTH_COLUMN = Constant.FOURTH_COLUMN;
    public ArrayList<HashMap<String,String>> list;
    Activity activity;

    public listviewAdapter(Activity activity, ArrayList<HashMap<String,String>> list) {
    super();
    this.activity = activity;
    this.list = list;
    }

    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
    }

    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
    }

    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
    }

    private class ViewHolder {
       TextView txtFirst;
       TextView txtSecond;
       TextView txtThird;
       TextView txtFourth;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View vi=convertView;
    // TODO Auto-generated method stub
            ViewHolder holder;
            LayoutInflater inflater =  activity.getLayoutInflater();

            if (convertView == null)
            {
                convertView = inflater.inflate(R.layout.requestcard_columnsdetails, null);
                holder = new ViewHolder();




                holder.txtFirst = (TextView) convertView.findViewById(R.id.date);
                holder.txtSecond = (TextView) convertView.findViewById(R.id.from);
                holder.txtThird = (TextView) convertView.findViewById(R.id.to);
                holder.txtFourth = (TextView) convertView.findViewById(R.id.time);
                convertView.setTag(holder);
            }
            else
            {
                holder = (ViewHolder) convertView.getTag();
            }

            HashMap<String, String> map = list.get(position);
            holder.txtFirst.setText(map.get(FIRST_COLUMN));
            holder.txtSecond.setText(map.get(SECOND_COLUMN));
            holder.txtThird.setText(map.get(THIRD_COLUMN));
            holder.txtFourth.setText(map.get(FOURTH_COLUMN));



        return convertView;
    }
}

我使用

填充了主要活动中的列表项
int a,b;
list = new ArrayList<HashMap<String,String>>();
for ( a=0; a<outputString.length;a++){
    HashMap<String,String> temp1 = new  HashMap<String,String>();
    temp1.put( FIRST_COLUMN,outputString[a][0]);
    temp1.put(SECOND_COLUMN, outputString[a][1]);
    temp1.put(THIRD_COLUMN, outputString[a][4]);
    temp1.put(FOURTH_COLUMN, outputString[a][5]);
    list.add(temp1);
}
listviewAdapter adapter = new listviewAdapter(this, list);
lview.setAdapter(adapter);

【问题讨论】:

    标签: android android-listview listadapter onitemclicklistener


    【解决方案1】:

    连同列表项

    如果您想从 ListItem 中获取一些数据,只需在已经提到的侦听器中使用 parent.getItemAtPosition(position)。这将返回一个相应的Object,您可以使用它执行进一步的操作

       HashMap<String, String> map = (HashMap<String, String>) parent.getItemAtPosition(position);
      String one = map.get("key");
      String two = map.get("key2");
    
      Intent next = new Intent(FirstActivity.this, NextActivity.class);
      next.putExtra("One", one);
      next.putExtra("Two", two);
      startActivity(next);
    

    在您的第二个活动中获取它:

     Bundle extras = getIntent().getExtras();
     String one = extras.getStringExtra("One");
     String two = extras.getStringExtra("Two");
    

    【讨论】:

    • 嗨,我需要将该项目传递给下一堂课,这怎么可能?
    • 您需要传递的不是项目本身,而是它所拥有的数据。在您的情况下,使用 getItemAtPosition(position) 将返回一个 HashMap 。使用 get 方法从这个 HashMap 中获取字符串,然后将它们作为额外的 Intent
    • 那么如何从 hashmap 中获取该值?
    • 我添加了一些示例代码。你需要在你的监听器中做类似的事情
    • 嗨 Maver,我还有一个疑问,如何在列表视图中获取所选项目索引
    【解决方案2】:

    使用setOnItemClickListener:

    lview.setOnItemClickListener(new OnItemClickListener() {
    
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
           Intent intent = new Intent(Activity.this, secondActivity.class);
        startActivity(intent);
       }
     });
    

    【讨论】:

    • 我如何在下一节课中获取项目ID
    • 我还需要将项目数组,outputString[a][0]) 这个值传递给下一个类
    • 使用intent.putExtra(key,Value)
    【解决方案3】:

    试试这个:

    list_view.setOnItemClickListener(new OnItemClickListener() {
    
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
            {
    
             Intent myIntent = new Intent(Current_Activity.this,Next_Activity.class);
             startActivity(myIntent);
    }
    });
    

    【讨论】:

      【解决方案4】:

      在您的列表视图中创建您的 onItemClickListener,如下所示:

      lview.setOnItemClickListener(new OnItemClickListener() {
      
                  @Override
                  public void onItemClick(AdapterView parent, View view,
                          int position, long id) {
           Intent intent = new intent(mainactivity.this, target.class);
           // maybe put some extra arguments to the intent 
           startActivity(intent);
      
                  }
              });
      

      要将您的额外数据放入下一个活动,请使用您的意图: Intent doc

      【讨论】:

      • 我如何在下一堂课中获得 itm id?我需要将点击的项目传递给下一个班级,这怎么可能
      • intent.putExtra("id",id) 并在第二个活动中取回。
      • 我在我的回答中链接了文档。它为您提供了有关如何放置额外数据的更长解释。
      • no yar .. 我知道意图,但你能理解我的确切问题吗,看,当我点击一个项目时,我想在下一个类中获取项目 ID、位置、项目值,怎么可能?
      • Intent 是与其他活动交流的唯一方式。他们可以使用 get 方法。只需将您的 id 和其他必需值放入意图中即可。如果您单击一个项目,android 将使用您的 onClickListener 并且 id 是您的零基点击项目。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2013-01-24
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多