RecyclerView 适配器中的警报对话框

Alert Dialog in RecyclerView Adapter

我已经实现了一个长按监听器来从我的 recyclerview 中删除一个条目,我想给用户最后一次改变主意的机会。我已经使用警报对话框在 'standard' 视图中做了类似的事情,并且我为警报视图中的按钮制作了一些可绘制对象,我想再次使用它们(以在我的所有视图中保持不变的界面)

我正在使用的可绘制对象是:

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/minus_button"
      android:state_pressed="false"
      android:state_selected="false"/>
  <item android:drawable="@drawable/add_button"
      android:state_pressed="true"/>

</selector>

我尝试使用的警报是:

  public void deleteRequestCheck(final int tempIDval){

    AlertDialog.Builder builder = new AlertDialog.Builder(this.context);
    builder.setMessage("Are you sure you want to reset all your climbs back to zero?");
    builder.setCancelable(false);
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
              deleteEntry(tempIDval);
        }

    });

    AlertDialog alert = builder.create();
    alert.show();
    Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE);
    nbutton.setBackgroundColor(getDrawable(R.drawable.button_tap));
    nbutton.setTextColor(Color.WHITE);
    Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE);
    pbutton.setBackgroundColor(getDrawable(R.drawable.button_tap));
    pbutton.setTextColor(Color.WHITE);
}

我从我的适配器内部调用它 class(处理长按操作的地方)。

我遇到的问题是

 nbutton.setBackgroundColor(getDrawable(R.drawable.button_tap));
 pbutton.setBackgroundColor(getDrawable(R.drawable.button_tap));

给我一个错误 Cannot resolve method 'getDrawable(int)'。这让我感到难过,因为这与我在之前的活动中创建和调用此警报对话框的方式相同。

实际上有两种方法可以做到这一点:

1) 编程方式如:

nbutton.setBackground(ContextCompat.getDrawable(this.context‌​, R.drawable.mypositiveButtonDrawable));

但是如果您希望其他对话框的按钮颜色相同怎么办?为什么要重复工作?

2) 通过 styles.xml

在您的 styles.xml 中创建一个主题,例如:

<style name="DiscardChangesDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/DialogButtonNegative</item>
    <item name="buttonBarPositiveButtonStyle">@style/DialogButtonPositive</item>
</style>

<style name="DialogButtonNegative" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:textColor">@color/dialog_button_negative</item>
</style>

<style name="DialogButtonPositive" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:textColor">@color/dialog_button_positive</item>
</style>

然后像这样使用它:

AlertDialog.Builder(this, R.style.DiscardChangesDialog)

然后你就不用担心适配器什么的了。

希望对您有所帮助!!!