2016-04-22 12 views
-3

Die Liste wird mit allen Zeichenfolgen geladen. Wenn sie übereinstimmen, werden die übereinstimmenden Elemente angezeigt. Aber ich möchte, dass diese Liste nur angezeigt wird, wenn die Suche eingegeben wird und die Liste nur die Elemente enthält, nach denen gesucht wird.Wie wird eine Listenansicht mit nur übereinstimmenden Elementen während der Eingabe angezeigt, als alle (nicht übereinstimmenden) Elemente gleichzeitig?

package com.example.searchlistview; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.os.StrictMode.ThreadPolicy; 
import android.text.TextUtils; 
import android.view.View; 
import android.view.Window; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.SearchView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements SearchView.OnQueryTextListener { 

    private static final String TAG = "SearchViewFilterMode"; 

    private SearchView mSearchView; 
    String data,temp,users; 
    private ListView mListView; 
    private ArrayAdapter<String> mAdapter; 

    private final ArrayList<String> mstrings_arr=new ArrayList<String>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

     setContentView(R.layout.activity_main); 

     mSearchView = (SearchView) findViewById(R.id.search_view); 
     mListView = (ListView) findViewById(R.id.list_view); 



     try 
     { 
      ThreadPolicy policy = new ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      HttpClient client=new DefaultHttpClient();     
      HttpPost post=new HttpPost("http://192.162.1.126:1234/www/search_reg_users.php"); 

      HttpResponse res=client.execute(post); 
      InputStream inp=res.getEntity().getContent(); 
      BufferedReader bf=new BufferedReader(new InputStreamReader(inp)); 

      //since this much code of Buffered reader alone wont get , complete data , therefore , we add the below code 

      data=""; 
      temp=""; 

      while((temp=bf.readLine())!=null) 
      { 
       data=data+temp; 
      } 

      JSONArray array=new JSONArray(data); 

      for(int i=0;i<array.length();i++) 
      { 
       JSONObject object=array.getJSONObject(i); 

       users=object.getString("username"); 
       mstrings_arr.add(users); 
       Toast.makeText(getApplicationContext(),users+" added to list",Toast.LENGTH_SHORT).show(); 

      } 
     } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 





     mListView.setAdapter(mAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       mstrings_arr)); 
     mListView.setTextFilterEnabled(true); 
     setupSearchView(); 
    } 

    private void setupSearchView() { 
     mSearchView.setIconifiedByDefault(false); 
     mSearchView.setOnQueryTextListener(this); 
     mSearchView.setSubmitButtonEnabled(false); 
     mSearchView.setQueryHint(getString(R.string.cheese_hunt_hint)); 
    } 

    public boolean onQueryTextChange(String newText) { 
     if (TextUtils.isEmpty(newText)) { 
      mListView.clearTextFilter(); 
     } 

Nach dem obigen Code, habe ich versucht, die Sichtbarkeit der Listenansicht Einstellung VISIBILE nur zu sein, wenn eine Übereinstimmung gefunden wird. Es funktioniert nur für eine Suchinstanz. Wenn eine Übereinstimmung gefunden wird, wird die gesamte Liste zurückgegeben.

Was ich will, sind wie folgt zu erhalten:

  1. Geben Sie eine Suche in Suchfeld
  2. Wenn das Such jede Position in der Positionsliste übereinstimmt
  3. NUR DANN, Die Liste wird angezeigt, aber mit NUR ABGESTIMMTEN ARTIKEL

else {

  mListView.setFilterText(newText.toString()); 
      mListView.setVisibility(View.VISIBLE); 
     } 
    return true; 
} 

public boolean onQueryTextSubmit(String query) { 
    return false; 
} 

}

+0

Hinweis: Suchen Sie in Ihrer Liste Daten ändern und benachrichtigen. –

Antwort

0

AutoCompleteTextView dem Zweck diente, schließlich

package com.example.searchlistview; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.os.StrictMode.ThreadPolicy; 
import android.text.Layout; 
import android.text.TextUtils; 
import android.view.View; 
import android.view.Window; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 
import android.widget.ListView; 
import android.widget.SearchView; 
import android.widget.Toast; 

//public class MainActivity extends Activity implements SearchView.OnQueryTextListener { 
public class MainActivity extends Activity{ 

    private static final String TAG = "SearchViewFilterMode"; 

    private SearchView mSearchView; 
    String data,temp,users; 
    private ListView mListView; 

    private final ArrayList<String> mstrings_arr=new ArrayList<String>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 

     setContentView(R.layout.activity_main); 
     ArrayAdapter<String> mAdapter=new ArrayAdapter<String>(this, android.R.layout.select_dialog_item,mstrings_arr); 

     mSearchView = (SearchView) findViewById(R.id.search_view); 
     mListView = (ListView) findViewById(R.id.list_view); 



     try 
     { 
      ThreadPolicy policy = new ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      HttpClient client=new DefaultHttpClient();     


      HttpPost post=new HttpPost("http://192.168.1.16:1234/www/search_reg_users.php"); 


      HttpResponse res=client.execute(post); 
      InputStream inp=res.getEntity().getContent(); 
      BufferedReader bf=new BufferedReader(new InputStreamReader(inp)); 

      //since this much code of Buffered reader alone wont get , complete data , therefore , we add the below code 

      data=""; 
      temp=""; 

      while((temp=bf.readLine())!=null) 
      { 
       data=data+temp; 
      } 

      JSONArray array=new JSONArray(data); 

      for(int i=0;i<array.length();i++) 
      { 
       JSONObject object=array.getJSONObject(i); 

       users=object.getString("username"); 
       mstrings_arr.add(users); 
       Toast.makeText(getApplicationContext(),users+" added to list",Toast.LENGTH_SHORT).show(); 

      } 
     } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 


     //AutoCompleteSearchView 

     AutoCompleteTextView actv= (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1); 
     actv.setThreshold(1);//will start working from first character 
     actv.setAdapter(mAdapter);//setting the adapter data into the AutoCompleteTextView 
     actv.setTextColor(Color.RED); 

    } 

XML, für die gleiche ist:

<AutoCompleteTextView 
    android:id="@+id/autoCompleteTextView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="36dp" 
    android:layout_marginTop="17dp" 
    android:ems="10" 
    android:text=""> 

    <requestFocus /> 
</AutoCompleteTextView> 
2

Sie müssen addTextChangedListener verwenden, um Ihr Problem hier zu lösen. Ich habe an ähnlichen Dingen gearbeitet.

addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 

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

      @Override 
      public void onTextChanged(CharSequence s, int start, 
             int before, int count) { 
       if (s.length() != 0) { 
       } 
      } 
     });