2017-04-10 2 views
-2

Ich befüllen die ArrayList der Zeichenfolgen aus SQLLite-Datenbank. Der Benutzer gibt den Wert ein, den er finden möchte, und das Suchergebnis wird in der Listenansicht für den Benutzer angezeigt. Gerade jetzt, wenn ich einige Einträge in die Datenbank einfüge, sind es immer alle Daten. Ich möchte diese Suche mit Java nicht Sql Abfragen, der Code ich habe scheint, um zu einem gewissen Grad zu arbeiten, aber es tut nicht wirklich, was ich will es tun. Was mache ich hier falsch?Füllen ArrayList von sqllite, und überprüfen Sie, ob es enthält

public void searchEventDetails(){ 

    final ArrayList<String> dbEntries = new ArrayList<>(); 
    final ArrayList<String> entryId = new ArrayList<>(); 

    Cursor cursor = eventDB.getAllDataSearch(); 

    if (cursor.moveToFirst()){ 
     do{ 

       dbEntries.add("Title: "+ cursor.getString(1)+"\n" + "Description: "+cursor.getString(2)); 

       entryId.add(cursor.getString(0)); 

     }while(cursor.moveToNext()); 
    } 
    cursor.close(); 

     if (dbEntries.contains(txtSearch.getText())){ 
      System.out.print("Value"); 
     } 
     ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dbEntries); 

     ListView listView = (ListView) findViewById(R.id.listViewFromDBSearch); 

     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       String itemSelected = "You Selected " + String.valueOf(parent.getItemAtPosition(position)); 
       Toast.makeText(SearchEvent.this, itemSelected, Toast.LENGTH_SHORT).show(); 
       Intent showSearchEvents = new Intent(getApplicationContext(),ShowSearchEvents.class); 
       search = String.valueOf(parent.getItemAtPosition(position)); 

       for (int i=0;i<dbEntries.size();i++){ 
        if (search.equals(dbEntries.get(i))){ 

         SearchEvent.this.id = entryId.get(i); 
        } 

       } 
       showSearchEvents.putExtra("id", SearchEvent.this.id); 
       startActivity(showSearchEvents); 
      } 
     }); 
} 

Antwort

0

Sie müssen es tun, wie dieser

public void searchEventDetails(String search){ 

    final ArrayList<String> dbEntries = new ArrayList<>(); 
    final ArrayList<String> entryId = new ArrayList<>(); 

    Cursor cursor = eventDB.getAllDataSearch(search); 

    if (cursor.moveToFirst()){ 
     do{ 

       dbEntries.add("Title: "+ cursor.getString(1)+"\n" + "Description: "+cursor.getString(2)); 

       entryId.add(cursor.getString(0)); 

     }while(cursor.moveToNext()); 
    } 
    cursor.close(); 


     ListAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dbEntries); 

     ListView listView = (ListView) findViewById(R.id.listViewFromDBSearch); 

     listView.setAdapter(adapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       String itemSelected = "You Selected " + String.valueOf(parent.getItemAtPosition(position)); 
       Toast.makeText(SearchEvent.this, itemSelected, Toast.LENGTH_SHORT).show(); 
       Intent showSearchEvents = new Intent(getApplicationContext(),ShowSearchEvents.class); 
       search = String.valueOf(parent.getItemAtPosition(position)); 

       for (int i=0;i<dbEntries.size();i++){ 
        if (search.equals(dbEntries.get(i))){ 

         SearchEvent.this.id = entryId.get(i); 
        } 

       } 
       showSearchEvents.putExtra("id", SearchEvent.this.id); 
       startActivity(showSearchEvents); 
      } 
     }); 
} 

dann in Ihrer Methode getAllDataSearch() add String-Parameter wie diese und verwenden wie auf Ihre Anfrage

public cursor getAllDataSearch(String search){ 

String query = "SELECT * FROM your_table WHERE your column LIKE '%" + search + "%'" 

//your stuff here 
} 

vergessen Sie nicht textwatcher verwenden in Ihrem Editxt

txtSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // Call back the Adapter with current character to Filter 

      searchEventDetails(txtSearch.getText().toString()); 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count,int after) { 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 

hoffe diese Antwort hilft

+0

btw transferiere deinen listView.setOnItemClickListener in onCreate – Irabzz

Verwandte Themen