I have a RecyclerView
, and in its adapter, I have created something similar to an OnLongClickListener
, which I am calling an OnEntryLongClickListener
to avoid confusion.
I am using an AlertDialog
to display a dialog with list items for different actions. However, I am getting the following error:
E/AndroidRuntime: android.content.res.Resources$NotFoundException: Resource ID #0x0
at android.content.res.Resources.getValue(Resources.java:2345)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:3910)
at android.content.res.Resources.getLayout(Resources.java:2161)
at android.view.LayoutInflater.inflate(LayoutInflater.java:413)
at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
at android.support.v7.app.AlertController$AlertParams.createListView(AlertController.java:734)
at android.support.v7.app.AlertController$AlertParams.apply(AlertController.java:711)
at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:883)
at com.mycompany.myapp.ThisActivity$2.onEntryLongClick(ThisActivity.java:135)
at com.mycompany.myapp.adapter.RVAdapter$RVViewHolder.onLongClick(RVAdapter.java:41)
at android.view.View.performLongClick(View.java:5236)
Below is the relevant code I am using:
adapter.setOnEntryLongClickListener(new RVAdapter.OnEntryLongClickListener() {
@Override
public void onEntryLongClick(View view, int position) {
final MiniEntry thisEntry = entryList.get(position);
AlertDialog.Builder builder = new AlertDialog.Builder(getBaseContext());
builder.setTitle(thisEntry.getEntryName()););
builder.setItems(R.array.quickActions, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Other code here
}
});
AlertDialog alert = builder.create(); // The error log points to this line
alert.show();
}
});
mRecyclerView.setAdapter(adapter);
As well as the XML I am using for the array:
<string-array name="quickActions">
<item>Add to Favourites</item>
<item>More information</item>
</string-array>
I'm not sure if it matters, but I am importing the AlertDialog
from android.support.v7.app.AlertDialog
(from the v7 Support Library).
How can I solve this problem?
Try putting an style for your Dialog that extends Theme.AppCompat.Light.Dialog.Alert
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />
This works for me.
Greetings
Pass your context correctly by casting it to Activity if you are calling from a Fragment.
In Kotlin,
Change
getBaseContext()
in theAlertDialog.Builder
instantiation to the currentActivity
instance. For example:An
AlertDialog
requires certain resources whose values are provided by the themes and styles attached to theContext
it uses. TheContext
returned bygetBaseContext()
doesn't have those attached, but theActivity
does. Indeed, whenever aContext
is needed for a UI component - e.g.,Dialog
s,View
s,Adapter
s, etc. - the currentActivity
is usually what you want to use.