2015-10-08 13 views
15

Ich habe eine RecyclerView, und in seinem Adapter habe ich etwas ähnliches zu einem OnLongClickListener, die ich ein OnEntryLongClickListener anrufen, um Verwirrung zu vermeiden.

Ich verwende eine AlertDialog, um einen Dialog mit Listenelementen für verschiedene Aktionen anzuzeigen. Allerdings erhalte ich folgende Fehlermeldung:

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) 

Unten ist der entsprechende Code Ich verwende:

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); 

Neben dem XML-I für das Array bin mit:

<string-array name="quickActions"> 
    <item>Add to Favourites</item> 
    <item>More information</item> 
</string-array> 

Ich bin mir nicht sicher, ob es wichtig ist, aber ich importiere die AlertDialog von android.support.v7.app.AlertDialog (aus der v7 Support Library).

Wie kann ich dieses Problem lösen?

+1

ändern 'getBaseContext()' in 'AlertDialog.Builder' Instanziierung zum Beispiel aktuellen Aktivität. Zum Beispiel 'new AlertDialog.Builder (ThisActivity.this)'. –

+0

@MikeM. Das hat funktioniert! Könntest du das als Antwort posten und erklären, warum es auch das Problem gelöst hat - danke. –

Antwort

21

Ändern Sie getBaseContext() in der Instanziierung AlertDialog.Builder in die aktuelle Instanz Activity. Zum Beispiel:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 

Ein AlertDialog erfordert bestimmte Ressourcen, deren Werte werden von den Themen und Stile der Context befestigt es verwendet. Die Context zurückgegeben von getBaseContext() hat nicht diese beigefügt, aber die Activity tut. Wann immer eine Context für eine UI-Komponente benötigt wird - z. B. Dialog s, View s, Adapter s usw. - ist normalerweise die aktuelle Activity die, die Sie verwenden möchten.

+0

Wenn ich dies innerhalb eines Fragments anrufe und 'getActivity()' verwende, bekomme ich immer noch diesen Fehler. Irgendwelche Ideen warum? – AdamMc331

+0

gespeichert viel Zeit. Danke –

+0

Also wann weiß man wann * Activity * oder wann * BaseContext * – Relm

16

versuchen, einen Stil für Ihren Dialog setzen, die Theme.AppCompat.Light.Dialog.Alert

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert" />

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme); 

Dies funktioniert für mich erstreckt.

Grüße

+0

für mich repariert, danke! – Nickmccomb

+0

Funktioniert auch für mich. Sieht für mich wie ein Fehler in der Support-Bibliothek aus. –

+0

Für mich war der Schlüssel, dass, wenn ich kein Thema wie Sie vorschlagen, das Aktivitätsthema ein AppCompat Thema erweitern musste – rupps

Verwandte Themen