通过编辑文本搜索列表视图

时间:2014-02-03 10:47:52

标签: android listview android-edittext

大家好我想开发的应用程序在数组列表中有很多项目,一个编辑文本在列表视图中快速使用搜索项目我显示你的图像:

enter image description here

所以在页面

中如何可行

7 个答案:

答案 0 :(得分:2)

尝试在Android中使用自动完成文本视图。在Android中使用搜索功能编辑文本。

您不需要使用“自动完成文本”视图编写用于过滤的代码

有关源代码,请查看this 示例。

您可以询问是否有任何疑问。快乐编码:)

答案 1 :(得分:0)

你检查过需要设置textwatcher的Arrayadapter过滤器方法吗?在textchange方法中你需要调用adapter.filter(“在edittext中输入的单词”),你完成了更多细节检查this

答案 2 :(得分:0)

您尝试执行的操作可能会通过AutoCompleteTextView实现,因此您必须更改EditText

此外,您需要扩展自己的ArrayAdapter,并在其中扩展您的Filter类并声明扩展过滤器类的实例。在Filter扩展程序中,您需要覆盖以下方法:

  • FilterResults performFiltering(CharSequence):您要实施如何过滤。
  • void publishResults(CharSequence, final FilterResults):您将在此处收到您从FilterResults返回的结果作为第二个参数。如果您有多个项目,只需致电notifyDataSetChanged()

这样您就可以按照自己的方式进行过滤。可能会找到一个很好的例子here

答案 3 :(得分:0)

您需要将addTextChangedListener添加到EditText。当用户在EditText中输入新数据时,从中获取文本并将其传递给数组适配器过滤器。 你可以这样添加:

inputSearch.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
    // When user changed the Text
    MainActivity.this.adapter.getFilter().filter(cs);  
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void afterTextChanged(Editable arg0) {
    // TODO Auto-generated method stub                         
}

});

完整示例是here

答案 4 :(得分:0)

试试这个简单代码: 的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".SOF_AutoList" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Name" >

            <requestFocus />
        </EditText>
    </LinearLayout>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

Java活动类:

public class SOF_AutoList extends Activity
{
    private ListView listview;
    private EditText edttxt;
    private ArrayAdapter<String> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sof__auto_list);

        ArrayList<String> data = new ArrayList<String>();
        for(int i=0;i<10;i++)
        {
            if(i==0 || i==1 || i==3)
            {
                data.add("Apple "+(i+1));
            }
            else if(i==4 || i==5)
            {
                data.add("Banana "+(i+1));
            }
            else
            {
                data.add("CArrot "+(i+1));
            }
        }

        listview = (ListView)findViewById(R.id.listView1);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1,data);
        listview.setAdapter(adapter);

        edttxt = (EditText)findViewById(R.id.editText1);
        edttxt.addTextChangedListener(new TextWatcher()
        {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                adapter.getFilter().filter(s);
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });
    }


}

答案 5 :(得分:0)

我使用此代码通过使用简单的edittext制作自动完成的Edittext。

公共类MainActivity扩展了Activity实现OnKeyListener {

EditText e;
String[] st={"apple","abhay","anurag","boll","banana","basic","cat","calm"};
String[] temp={"","","","","",""};
ArrayAdapter<String> ad;
ListView lv;
ViewGroup vg;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    vg=(ViewGroup)findViewById(R.id.LinearLayout1);
    e=(EditText)findViewById(R.id.editText1);
    e.setOnKeyListener(this);
    ad=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_list_item_1, temp);
    lv=new ListView(getBaseContext());
    lv.setAdapter(ad);
    lv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
    // TODO Auto-generated method stub
    Log.d("", "onKey Entered");
    if(KeyEvent.ACTION_UP==arg2.getAction())
    {

    vg.removeView(lv);
    String s=e.getText().toString();
    Log.d("", "onKey if Entered"+s);
    for(int i=0,j=0;i<st.length;i++,j++)
    {
        if(st[i].startsWith(s))
            temp[j]=st[i];
        else
            --j;

    }
    vg.addView(lv);

}
    return false;

}

答案 6 :(得分:0)

我的代码在这里

ArrayList<Integer> ids=new ArrayList<Integer>();
    ArrayList<String>  ar=new ArrayList<String>();

    ArrayAdapter  adpter;

    private ListView list;
    private EditText search;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        search=(EditText)findViewById(R.id.tvsearch);

        ActionBar ab=getActionBar();

        list =(ListView)findViewById(R.id.list);

        handler h=new handler(MainActivity.this);
        ArrayList<property> p = h.display();
        StringBuffer sb;

        for(property p1 : p)
        {
            sb=new StringBuffer();
            int id=p1.getId();
            String State_Name = p1.getState_name();
            String State_Web= p1.getState_web();

            ar.add(State_Name);
            ids.add(id);

        }
            h.close();


            adpter=new ArrayAdapter(MainActivity.this, android.R.layout.simple_selectable_list_item,ar);
            list.setAdapter(adpter);

            search.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    MainActivity.this.adpter.getFilter().filter(s); 

                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub

                }
            });

    //  list.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_selectable_list_item,ar));
        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int pos,
                    long id) 
            {
                int did=ids.get(pos);
                Intent i=new Intent(MainActivity.this,website.class);
                i.putExtra("did",did);
                startActivity(i);
            }
        });

    }