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:
- Geben Sie eine Suche in Suchfeld
- Wenn das Such jede Position in der Positionsliste übereinstimmt
- 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;
}
}
Hinweis: Suchen Sie in Ihrer Liste Daten ändern und benachrichtigen. –