2016-07-28 13 views
-1

Zunächst verzeihen Sie mir, wenn das eine dumme Frage ist, weil ich auf diesem Gebiet relativ neu bin. Also im Grunde habe ich eine activity, die ein Fragment enthält. Dieses Fragment hat drei Knöpfe. Und wenn eine dieser Schaltflächen angeklickt wird, wollte ich spezifische Toast messages anzeigen. Ich habe die onClick() Methode verwendet, die in einer Aktivität gut funktioniert. Aber wenn ich dasselbe in einem Fragment verwende, stürzt die App ab. Bitte helfen Sie mir in dieser Hinsicht. Name der Aktivität ist "User.java" und seine XML-Datei ist "activity_user.xml". Name des Fragments "user_home.java" und seine XML-Datei ist "user_home_layout.xml".
Ich habe zwei Bilder angehängt, das erste enthält die Aktivität und ihre XML-Datei, während das zweite das Fragment und seine SML-Datei enthält.Wie wird eine Toast-Nachricht beim Klicken auf eine Schaltfläche in einem Fragment angezeigt?

1. Activity 2. Fragment

+1

Konnten Sie Ihre Stapelspur des App-Absturzes veröffentlichen? – NitroNbg

+0

Es kann mindestens zwei mögliche Gründe für den Absturz geben. 1) 'buttonInFragment = (Schaltfläche) view.findViewById (R.id.buttonInFragment);' 'buttonInActivity = (Schaltfläche) findViewById (R.id.buttonActivity);' 'Toast.makeText (MainActivity.this," Toast für Aktivität ", Toast.Length_Short) .show()' 'Toast.makeText (getActivity()," Toast für Fragment ", Toast.Length_Short) .show()' –

+0

@NitroNbg: Das ist der Fehler, den ich bekomme: ' java.lang.IllegalStateException: Konnte Methode ButtonClick (View) in einem Eltern- oder Vorfahren-Kontext nicht finden. Kontext für android: onClick-Attribut, definiert in der View-Klasse android.support.v7.widget.AppCompatButton mit der ID 'GOT' ' –

Antwort

3

Sie müssen eine benutzerdefinierte einstellen OnClickListener auf Ihre Schaltfläche:

yourButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "your toast text", Toast.LENGTH_LONG).show(); 
      } 
     }); 
+0

Das hat funktioniert. Danke vielmals! –

4

Sie DINT in Ihrem Fragment finden Schaltfläche,

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.user_home_layout, container, false); 

    btn1=(Button)view.findViewById(R.id.GOT); 
    btn2=(Button)view.findViewById(R.id.SH); 
    btn3=(Button)view.findViewById(R.id.TD); 

return view; 
} 

und dann implementieren Klicken Sie auf Listener und und in Toast verwenden Sie einfach getActivity()

Toast.makeText(getActivity(), "Game Of Thrones", Toast.LENGTH_SHORT).show(); 

Implementieren Methode

public void ButtonClick(View v) { 
switch(v.getId()) { 

case R.id.GOT: 


    Toast.makeText(getActivity(), "Game of Thornes", Toast.LENGTH_LONG).show(); 

    break; 


case R.id.SH: 


    Toast.makeText(getActivity(), "Sherlock", Toast.LENGTH_LONG).show(); 

    break; 


case R.id.TD: 


    Toast.makeText(getActivity(), "True Detective", Toast.LENGTH_LONG).show(); 

    break; 
    } 
}  
1

In Ihrer Tätigkeit:

Toast.makeText(YourActivity.this, "your message", Toast.LENGTH_SHORT).show(); 

In Ihrem Fragmente:

Toast.makeText(this.getActivity(), "your message", Toast.LENGTH_SHORT).show(); 
+0

Ändern des verwendeten Kontextes wird das Benutzerproblem nicht beheben –

1

@TonyMathew, willkommen in der Android Welt. Ihre Implementierung von ButtonClick ist falsch. This ist eine umfangreiche Anleitung, wie Sie Fragmente verwenden sollten. Es gibt ein Beispiel für die Handhabung von Klickereignissen. Kurz gesagt, Sie müssen Ihre Schaltflächen in Ihrem XML-Fragment-Layout nach ID suchen. BENUTZEN SIE NICHT DEN BUTTON'S TEXT!

Bitte suchen Sie im Internet nach Informationen, bevor Sie hier eine Frage stellen. Die Chancen stehen gut, dass Sie finden was Sie suchen!

P.S. normalerweise in Java sollten Sie Ihre Klasse in der folgenden Art und Weise nennen: ClassName.java und nicht class_name.java

+0

Als erstes möchte ich darauf hinweisen, dass diese Antwort definitiv ein Kommentar sein sollte und die zweite, dass es kein Problem gibt, die Schaltfläche namentlich zu finden. –

+0

@Todor Kostov: Tatsache ist, dass ich ziemlich verwirrt bin, wenn ich mit Knöpfen klicke. –

+0

@lulian Popescu, vor allem sollte die Antwort kein Kommentar sein, basierend auf der Tatsache, dass es nützliche Informationen zu der Frage bietet und zweitens gibt es ein großes Problem bei der Verwendung der Bezeichnung eines Knopfes für die Identifizierung. Was passiert, wenn Sie versuchen, Ihre App zu lokalisieren? Wenn Sie die folgenden "Weiter" (Englisch) & "Продължи" (Bulgarische Übersetzung) als Text für die gleiche Schaltfläche haben, wird Ihre Logik nicht funktionieren! –

1

Einfach getActivity() im Zusammenhang mit Maketext() wie folgt aus:

Toast.makeText(getActivity(), "Your message", Toast.LENGTH_SHORT).show(); 
+0

Mit 'getActivity' wird nur der verwendete Kontext geändert, nicht das Problem gelöst –

1

Das Problem ist, dass Ihre Methode nicht in Aktivität gefunden wird, und so eine Ausnahme ausgelöst wird (die Methoden aus Fragmenten zählt hier nicht).Um dies zu beheben, dass Sie zwei Möglichkeiten:

  1. die ButtonClick Methode in Aktivität bewegen und einige kleine Änderungen machen (Sie werden auf eine andere Weise erhalten müssen die Context) und halten Sie die XML-Datei die gleiche;
  2. Setzen Sie onClickListener für Schaltfläche und behandeln Sie das onClick Ereignis im Listener.