簡體   English   中英

如何在一次輸入所有(不匹配的)項目時顯示僅包含匹配項目的列表視圖?

[英]How to display a listview with only matched items while typing than all (unmatched)items at once?

該列表加載了所有字符串,並且在匹配時顯示匹配的項目。 但是,我希望該列表僅在輸入搜索時顯示,並且該列表僅包含搜索過的項目。

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();
        } 

在上面的代碼之后,我嘗試將列表視圖的可見性設置為 VISIBILE 僅在找到匹配項時。 它僅適用於一個搜索實例,如果找到匹配項,則返回整個列表。

我希望得到什么,如下:

  1. 輸入搜索框搜索
  2. 如果該搜索匹配列表項中的任何項目
  3. ONLY THEN顯示列表只有 MATCHED ITEM

別的 {

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

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

}

您需要在這里使用 addTextChangedListener 來解決您的問題。 我做過類似的事情。

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) {
                }
            }
        });

AutoCompleteTextView 達到了目的,最后

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 ,同樣是:

<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>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM