【问题标题】:How do I determine which button was pressed from a list of buttons in Android?如何确定从 Android 中的按钮列表中按下了哪个按钮?
【发布时间】:2016-01-27 19:09:12
【问题描述】:

我有一个用于卡片视图的 xml 文件,可在我的主要 android 类的回收视图中使用。此卡片视图包含一个按钮,用于从列表中删除卡片视图。我遇到的问题是recyclerview中的所有按钮都有相同的onClick值,我不知道如何区分它们。

这是我在 cardview xml 中的按钮:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Delete"
    android:id="@+id/btnDelete"
    android:onClick="DeleteCard"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

在我的主课中,我有一个函数 DeleteCard,只要我按下任何删除按钮,它就会运行。我的卡片视图中也有一个 TextView,我想知道当我按下删除按钮时是否有可能以某种方式检索 TextView 中的文本,以便我知道要删除哪个。

这是我的 onBindViewHolder:

public void onBindViewHolder(TimeViewHolder personViewHolder, int i) {
    int min = (int)(times.get(i).time / (60 * 1000));
    int remaining = (int)(times.get(i).time % (60 * 1000));
    int sec = remaining / 1000;
    remaining = remaining % (1000);
    int mill = (remaining%1000)/10;
    DecimalFormat df = new DecimalFormat("00");
    personViewHolder.time.setText(min + ":" + df.format(sec) + "." + mill);
    personViewHolder.date.setText(times.get(i).date);
}

我想从日期中获取文本并将其用作参数以删除 SharedPreferences 中的该键。这是按下删除按钮时运行的方法:

public void DeleteCard(View view){
    SharedPreferences.Editor editor = history.edit();
    editor.remove("Date Here");
    editor.commit();
}

【问题讨论】:

  • 旁注,删除操作最好使用上下文操作栏。

标签: java android xml


【解决方案1】:

从 XML 中移除 onClick(),并在 onCreateViewHolder(..) 方法中添加点击监听器。可以从现在已弃用的 ViewHolder 类中的 getPosition() 方法检索该位置。

您可以使用getAdapterPosition()getLayoutPosition() 获得职位。

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ViewHolder.html#getPosition()

【讨论】:

  • 如何将 onClick() 添加到 onCreateViewHolder 方法中?抱歉,我是 Android 新手。
  • 这应该对你有帮助:stackoverflow.com/questions/5395114/…
  • 我如何从 onCreate 方法访问按钮视图?
【解决方案2】:

视图传递给DeleteCard方法,所以你可以使用view.getId()获取视图的id,然后你可以像这样切换id:

 public void DeleteCard(View view) {
    switch(view.getId()){

        case R.id.buttonDelete:
        ....
        break;

        case R.id.buttonAdd:
        ...
        break;



    }
}

【讨论】:

    【解决方案3】:

    在onBindViewHolder 中实现onclick on Button 而不是在xml 中,并为该按钮添加位置标签或唯一标识符。因此,当您单击然后在 onclick 中从视图对象中提取标签并执行您想要的操作时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2013-10-17
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多