2017-10-28 1 views
0

Mein Fragment Note greift auf die Delete-Methode der Fragment To-do-Liste zu und führt keine eigene Codezeile aus. Wie kann ich es korrigieren? Der Rest der Methoden funktioniert ordnungsgemäß.Fragment, das auf eine andere Java-Methode zugreift

Wo geht es schief?

Code of in-Fragment löschen Hinweis:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    int listpos = info.position; 
    String io = list1.getItemAtPosition(listpos).toString(); 
    StringTokenizer s=new StringTokenizer(io); 
    if (item.getTitle()=="Delete") { 
     ArrayList<String> all = new ArrayList<String>(); 
     while (s.hasMoreTokens()) { 
      all.add(s.nextToken()); 
     } 
     Toast.makeText(getContext(), all.get(0).toString(), Toast.LENGTH_SHORT).show(); 
     String query = "delete from notes where heading = '"+all.get(0).toString()+"';"; 
     database.execSQL(query); 
     //database.close(); 
     Intent n = new Intent(getContext(), MainActivity.class); 
startActivity(n); 

} 

Code of Fragment To-DOLIST:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    int listpos = info.position; 
    String io = list.getItemAtPosition(listpos).toString(); 
    StringTokenizer s=new StringTokenizer(io); 
    if (item.getTitle()=="Delete") { 
     ArrayList<String> al = new ArrayList<String>(); 
     while (s.hasMoreTokens()) { 
      al.add(s.nextToken()); 

      Toast.makeText(getContext(), al.get(0).toString(), Toast.LENGTH_SHORT).show(); 

      String query1 = "delete from todolist where elist = '" + al.get(0).toString() + "';"; 
      database.execSQL(query1) 

      Intent n = new Intent(getContext(), MainActivity.class); 
      startActivity(n); 

     } 
+0

verwenden, was tut 'Fragment' Note & todolist zu verlängern? @AkshraGupta, haben sie auch die gleiche Aktivität? Wenn ja, siehe: https://stackoverflow.com/questions/5297842/how-to-handle-oncontextitemselected-in-a-multi-fragment-activity –

+1

@AshishRanjan Vielen Dank für die Bereitstellung des Links. Obwohl es meine Frage nicht beantwortete, führte es mich zu einer anderen Frage, wo ich die Antwort fand. –

+1

Anstatt MenuItem zu verwenden, musste ich bei der Verwendung von Fragmenten android.view.MenüItem verwenden. –

Antwort

1

Verwenden .equals() Methode Strings zu vergleichen. Und deshalb wird Ihre if Bedingung false bekommen. So ersetzen

item.getTitle()=="Delete" 

mit

"Delete".equals(item.getTitle()); 
0

String Sie equals() oder matches() Methode benötigen zu vergleichen.

Also, in Ihrem Fall müssen Sie folgenden Zustand korrigieren: if.

if (item.getTitle().matches("Delete")) { 

} 

Oder in einem anderen Szenario können Sie

if (item.getTitle().equals("Delete")) { 

} 
+1

'item.getTitle(). Equals (" Delete ")' gibt "NullPointerException", wenn getTitle null zurückgibt. Und 'matches()' ist nicht zum Vergleichen exakter Strings gedacht. Es ist für reguläre Ausdrücke. Wenn 'getTitle' etwas wie'. + 'zurückgibt, ist Ihre Bedingung wahr. Siehe hierzu: '" Delete ".matches (". + ")' Gibt true zurück. – Kaushal28

+0

@ Kaushal28 Also, für das sollten Sie eine Bedingung der Überprüfung halten, wenn 'item.getTitle()! = Null 'und dann implementieren Sie die oben genannte Bedingung in ihm. Stellen Sie auch sicher, dass Sie dies unter try/catch Block –

+0

schreiben, aber keine Notwendigkeit von Versuch fangen und zusätzliche Bedingung, wenn Sie so schreiben: '" Delete ".equals (item.getTitle());' – Kaushal28

Verwandte Themen