2016-11-01 3 views
0

Ich habe Haupt Activity mit SearchView und benutzerdefinierte ListView, wenn ich auf SearchView klicken, um es nicht die Elemente auf ListView filtert, zeigen aber nur ein Element, wenn ich mit dem Schreiben fertig, und wenn SearchView Clearing tut es nicht zurück zu Haupt ListView.Suche leer Listenansicht zurückkehren

Bitte helfen, Dank

public class MainActivity extends AppCompatActivity { 
    private ListView listView; 
    List<WordTranslation> quotes; 
    Context context; 
    Adapter adapter; 
    Button searchBtn; 
    ArrayList <WordTranslation> arrayList = new ArrayList<>(); 
    WordTranslation wordTranslation; 
    DatabaseAccess databaseAccess; 
    SearchView sv; 
    EditText editText; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

    public ArrayList<WordTranslation> getwordtranslation(String SearchItem){ 
     arrayList.clear(); 

     Log.e("get word" , "open"); 
     wordTranslation = null; 
     Cursor cursor = retrieve(SearchItem); 
     System.out.println(SearchItem); 

     while (cursor.moveToNext()){ 
      String word = cursor.getString(0); 
      String translation = cursor.getString(1); 
      WordTranslation wordTranslation1 = new  WordTranslation(word,translation); 
      arrayList.add(wordTranslation1); 
     } 

     ArrayAdapter<WordTranslation> adapter = new Adapter(this, R.layout.activity_list_view_item,arrayList); 
     listView.setAdapter(adapter); 
     Log.e("get word" , arrayList.toString()); 

     return arrayList; 
    } 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.ListView); 
     listView.setTextFilterEnabled(true); 
     sv = (SearchView) findViewById(R.id.search_view); 
     DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this); 
     databaseAccess.open(); 
     databaseAccess.getQuotes(); 
     quotes = databaseAccess.ShowDictionaryDetails(); 
     databaseAccess.close(); 
     ArrayAdapter<String> adapter = new Adapter(this, R.layout.activity_list_view_item, quotes); 
     listView.setAdapter(adapter); 

     sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       Toast.makeText(MainActivity.this, "search loading .....", Toast.LENGTH_LONG).show(); 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
       getwordtranslation(newText); 

       listView.clearTextFilter(); 


       return false; 
      } 
     }); 
    }  

    public Cursor retrieve(String name){ 
     DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(this); 
     SQLiteDatabase data =databaseOpenHelper.getReadableDatabase(); 
     String table = "quotes"; 
     String where = "word = ? "; 
     String [] whereargs = {name}; 
     Log.e("retrieve", whereargs.toString()); 
     return data.query(table , null ,where , whereargs ,null, null, null); 
    } 
} 

Log Aktivität

E/get word: open I/SQLiteAssetHelper: successfully opened database quotes.db  E/retrieve: [Ljava.lang.String;@408fb608 E/get word: [] E/get word: open I/SQLiteAssetHelper: successfully opened database quotes.db E/retrieve: [Ljava.lang.String;@40a6f900 E/get word: [] E/get word: open I/SQLiteAssetHelper: successfully opened database quotes.db E/retrieve: [Ljava.lang.String;@40a748b0 E/get word: [] 
+0

konnte jeder Entwickler helfen? –

+0

Was ist das? ListView.clearTextFilter(); –

Antwort

0

Dies liegt daran, dass Sie auch leere Zeichenfolge filtern. Wenn die SearchView leer wird, erhält Ihre retrieve() leere Zeichenkette als Argument, und Ihre Datenbank-Abfrage sieht wie folgt aus:

SELECT * FROM quotes WHERE word = '' 

Und es sieht aus wie es keine Aufzeichnungen mit Wort ist auf leere Zeichenfolge entspricht.

es zu beheben, in Ihrem retrieve() Sie müssen überprüfen, ob name leer ist, dann alle Daten auszuwählen, ohne WHERE

+0

Ich habe die Log-Aktivität hochgeladen. reterive mothed return object Schlüssel nicht leerer String. –

Verwandte Themen