大家好我想开发的应用程序在数组列表中有很多项目,一个编辑文本在列表视图中快速使用搜索项目我显示你的图像:
所以在页面
中如何可行答案 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);
}
});
}