【问题标题】:Get listview item position on button click获取按钮单击时的列表视图项目位置
【发布时间】:2013-12-30 18:21:35
【问题描述】:

这是我的列表视图点击事件:

 lv1.setOnItemClickListener(new OnItemClickListener() {
       @Override
            public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                Object o = lv1.getItemAtPosition(position);
                ItemDetails obj_itemDetails = (ItemDetails)o;
                Toast.makeText(ListViewImagesActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();

        }  
 });

这是我的按钮点击事件:

btnNxt = (Button) findViewById(R.id.btnNext);
 btnNxt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
  //Here I need to get that position
});

现在我需要获取单击的列表视图项的位置。我已经在全局范围内声明了位置,但这总是给我位置 1。

谁能告诉我如何获得这个职位?

【问题讨论】:

  • 您在全球哪里宣布的职位?
  • @RGraham-onCreate方法之前
  • 你有没有像这样全局声明 position=1 ?
  • @piyush- 我已将其设置为 jst int 并没有指定任何值
  • @downvoter-Care to comment.Simply downvoting dosent 是有道理的

标签: android android-listview android-button listitem buttonclick


【解决方案1】:

你会执行这个

    btnNxt = (Button) findViewById(R.id.btnNext);
 btnNxt.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View arg0) {
  //Here I need to get that position
});

在 getView 方法中? 如果是这样,那就很容易了

     btnNxt = (Button) findViewById(R.id.btnNext);
     btnNxt.setTag(position);
     btnNxt.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View arg0) {
      int position=(Integer)arg0.getTag();
    });

【讨论】:

  • 您好先生,请告诉我如何在不单击元素名称的情况下获取特定元素的位置。
  • @NikhilSingh 你应该自己打开一个问题,或者使用搜索功能。不管怎样,Adapter类的public View getView(int position, View convertView, ViewGroup parent)方法已经包含了一个表示item位置的参数。
  • 使用标签是个坏主意。例如,如果您使用 Glide 加载,则不能在 ImageView 上调用 setTag。
【解决方案2】:

我知道我回答得有点晚了,但是这个呢:

private OnClickListener myButtonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
    View parentRow = (View) v.getParent();
    ListView listView = (ListView) parentRow.getParent();
    final int position = listView.getPositionForView(parentRow);
  }
};

在这种情况下您不需要设置标签等。

【讨论】:

  • 天啊,你是救生员。明天我的工作应用程序有一个截止日期,而就在今天我意识到,我没有找到正确的位置并花了一整天。谢谢)
  • 谢谢@PromotionArtwork :),那我呢? :D
  • 这对我帮助很大。我将 TAG 用于其他用途,但找不到好的解决方案。
  • 经过 3 小时的尝试,您的帮助:D 谢谢
  • 这也是 Swift (iOS) 在 ListView 中获得按钮点击的最佳方式
【解决方案3】:

如果您使用 ViewHolder,请确保您像这样使用 setTag()。

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;


        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.custom_row, parent, false);
            holder.btnNxt = (Button) convertView.findViewById(R.id.btnNext);
            holder.btnNxt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    int position=(Integer)arg0.getTag();
                });
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
          holder.btnNxt.setTag(position);   // <---- setTag() here 

            return convertView;
        }

        private class ViewHolder {
            Button btnNxt;
        }
    }

如果您在 setOnClickListener() 行之前设置了 setTag(),则在滚动列表视图时会遇到问题。

【讨论】:

    【解决方案4】:

    声明一个全局变量,并在 lisview 的 onItemClick() 方法中将视图位置设置为变量的值。 现在在按钮的点击方法中使用相同的变量。

    int global_position =0; // your global variable 
    
     lv1.setOnItemClickListener(new OnItemClickListener() {
           @Override
                public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
                   global_position =position;
            }  
     });
    
    btnNxt = (Button) findViewById(R.id.btnNext);
     btnNxt.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View arg0) {
        Toast.makeText(<context>,""+global_position,500).show();
    });
    

    【讨论】:

    • 它只会烘烤最后点击的项目位置!!
    • 你试过了吗?它有效吗?我想使用这种方法,因为我不想将位置放在视图标签上
    • 任何机构都可以告诉我如何根据元素名称找到特定元素的位置而不点击该元素。
    【解决方案5】:

    // 使用 "top" 获取列表视图项的顶部位置

    // Listview 项目顶部位置

        int top;
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View lView, final int pos, long id) {
                top = lView.getTop();
                if (top < 1) top = 1;
            }
        });
    

    // 或 // Listview items top position 在CustomAdapter的getView方法下

        int top;
        final View finalConvertView = convertView;
        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                top = finalConvertView.getTop();
    
                if (top < 1) top = 1;
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 2020-07-26
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多