【发布时间】:2015-12-27 07:34:53
【问题描述】:
我对 List 中的过滤数据没什么问题。我想过滤 List 中的数据。我的问题是我开始在 edittext 上写文本,而不是列表视图仅显示列表的第一个位置。
这是我的代码。
主类
public class ItemType extends AppCompatActivity {
ListView item;
Context context=this;
List<String> allItemNames = new ArrayList<String>();
Item_Type_list_adapter adapter;
EditText search;
ArrayAdapter<String> adapter1;
String[] data = {"mehul joisar","amit mishra","amitabh","Aamir khan","jesica","katrina"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_type);
search=(EditText)findViewById(R.id.Search);
item=(ListView)findViewById(R.id.item_type_listview);
allItemNames = new ArrayList<String>();
allItemNames.add("Coil");
allItemNames.add("Plate");
allItemNames.add("Sheet");
allItemNames.add("Extra");
adapter=new Item_Type_list_adapter(this,allItemNames);
item.setAdapter(adapter);
item.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
String data = (String) adapterView.getItemAtPosition(i);
Log.d("Positions", data);
}
});
search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence cs, int i, int i1, int i2) {
adapter.getFilter().filter(search.getText().toString());
adapter.notifyDataSetChanged();
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_item_type, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
return super.onOptionsItemSelected(item);
}
}
ArrayAdapter 类
public class Item_Type_list_adapter extends ArrayAdapter<String> implements Filterable {
Activity context;
private final List<String> allNames;
public Item_Type_list_adapter(Activity context,List<String> allNames) {
super(context, R.layout.item_type_layout,allNames);
this.context=context;
this.allNames=allNames;
}
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.item_type_layout, null, true);
TextView ItemName = (TextView) rowView.findViewById(R.id.ItemName);
ItemName.setText(allNames.get(position));
return rowView;
};
}
我在 List 中添加 4 个值
1.线圈 2.板材 3.表 4.额外的
当我开始过滤时它只显示线圈。但是当我触摸列表视图时它的日志完美值但只显示错误值。
帮我解决这个问题。
我的代码有什么遗漏吗?
提前致谢
【问题讨论】:
标签: android list listview filtering