2017-01-14 11 views
-1

Ich war Definieren und Verwenden eines benutzerdefinierten OnClickListener (d. H. MyOnClickListener) in der Datei des Fragments, das ich im Moment verwendete.Verwenden des gleichen "OnClickListener" in verschiedenen Aktivitäten

Keeping das Schreiben von Code erkannte ich, dass ich die gleiche Hörer benötigt auch in einem anderen Fragment, die auch in eine andere Aktivität sein passiert ist.

Ich habe daher die Datei MyOnClickListener.java Kopieren Sie den gesamten Code Ich war früher für sie in dem ersten Fragment verwenden, aber jetzt bekomme ich folgende Fehler:

kann nicht aufgelöst Methode ‚getActivity()‘

die Methode kann nicht ‚GetResources()‘

Hinweis lösen: ich lese auf Stackoverflow, dass eine Lösung nurSchreiben sein kann 0 anstelle von getActivity(), aber in meiner Situation muss ich das gleiche in zwei verschiedene Aktivitäten verwenden. Was soll ich machen?

EDIT: Hier ist der Code von MyOnClickListener Es hat nur eine Matrix von Symbolen angezeigt werden:

class MyOnClickListener implements View.OnClickListener { 

    private LabeledButton labeledButton; 

    MyOnClickListener(LabeledButton labeledButton) { 
    super(); 
    this.labeledButton = labeledButton; 
} 

@Override 
public void onClick(View view) { 
    Button iconButton = (Button) view; 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // ERROR HERE 
    LayoutInflater layoutInflater = getActivity().getLayoutInflater(); // ERROR HERE 
    final View viewLayout = layoutInflater.inflate(R.layout.dialog_matrix_icons, null); 
    builder.setView(viewLayout); 
    builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int id) { 
      // Do nothing 
     } 
    }); 
    final AlertDialog alertDialog = builder.create(); 

    // Set-up listeners of icon button 
    Button imageButtons[][] = new Button[3][3]; 
    int i; 
    int j; 
    for (i = 0; i < 3; i++) { 
     for (j = 0; j < 3; j++) { 
      Resources res = getResources(); // ERROR HERE 
      TypedArray icons = res.obtainTypedArray(R.array.listIcon); 
      int idDrawable = icons.getResourceId(i + 3 * j, 1); // ERROR HERE 
      icons.recycle(); 
      LinearLayout grid = (LinearLayout) viewLayout; 
      LinearLayout row = (LinearLayout) grid.getChildAt(i); 
      imageButtons[i][j] = (Button) row.getChildAt(j); // Retrieve the right image in the grid 
      imageButtons[i][j].setBackgroundResource(idDrawable); 
      String nameIcon = getResources().getResourceEntryName(idDrawable); // ERROR HERE 
      ImageOnClickListener imageOnClickListener = new ImageOnClickListener(iconButton, alertDialog, idDrawable, nameIcon, labeledButton); 
      imageButtons[i][j].setOnClickListener(imageOnClickListener); 
     } 
    } 
    alertDialog.show(); 
} 

}

+0

bitte zeigen Sie Ihren Code –

+0

@IntelliJAmiya getan vorbei! – Robb1

Antwort

2

Ersetzen Sie diese mit Ihrem Konstruktor

MyOnClickListener(LabeledButton labeledButton,Context context) { 
    super(); 
    this.labeledButton = labeledButton; 
    this.context = context; 
} 

Stellen Sie sicher, Kontextvariable in Ihrem MyOnClickListenerClass erstellen, wenn nicht, werden Sie Fehler an den Konstruktor finden line.Then Sie alle getActivity()-context ersetzen kann.

Wenn Sie initiallize Ihre MyOnClickListener sicherstellen, dass der Kontextparameter

Für Ihre inflater diese Verwendung

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) 
+0

Danke, es funktioniert überall perfekt, aber hier: 'LayoutInflater layoutInflater = context.getLayoutInflater();'. Was mache ich falsch? – Robb1

+1

Siehe Update-Code. Da Ihr Fragment normalerweise bereits einen eigenen Inflater hat, indem Sie context.getLayourInFlater verwenden, so dass Sie Ihren Inflator nicht initialisieren müssen, aber im Moment verwenden Sie separate Klasse, die Sie inflillieren müssen, damit es funktioniert. –

0

ich auf Stackoverflow zu lesen, dass eine Lösung nur Schreiben sein kann MainActivity.this anstelle von getActivity(), aber in meiner Situation muss ich in zwei verschiedenen Aktivitäten verwenden. Was soll ich machen?

Wenn Sie die OnClickListener in seiner eigenen Compilation Einheit setzen, können Sie nicht verwenden whawt Sie auf Stackoverflow lesen. , bezieht sich auf eine konkrete und aktuelle Instanz von MainActivity (bitte schauen Sie nach, was das Schlüsselwort this in Java bedeutet). Wenn Sie einen Kontext benötigen, können Sie ihn über den Parameter onClick callaback, View view abrufen. Lesen Sie mehr here

Verwandte Themen