Android ListView和TextFilter

Android ListView和TextFilter,android,listview,filter,Android,Listview,Filter,当浏览列表时,给定的位置是不正确的。如何表达我需要这个职位? 方法getItemId(位置)没有帮助! 有一些示例代码: lv1 = (ListView) findViewById(R.id.list); inputSearch = (EditText) findViewById(R.id.inputSearch); final String listcode[] = getResources().getStringArray(R.array.list); adapter = new Array

当浏览列表时,给定的位置是不正确的。如何表达我需要这个职位? 方法getItemId(位置)没有帮助! 有一些示例代码:

lv1 = (ListView) findViewById(R.id.list);
inputSearch = (EditText) findViewById(R.id.inputSearch);
final String listcode[] = getResources().getStringArray(R.array.list);
adapter = new ArrayAdapter<String>(this, R.layout.list_item,
        R.id.product_name, listcode);

lv1.setAdapter(adapter);
lv1.setTextFilterEnabled(true);

lv1.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> a, View v, int position,
            long id) {              

        long line = adapter.getItemId(position);
        Integer itemname = new Integer((int) line);
        Intent intent = new Intent();
        intent.setClass(Main.this, ShowKnot.class);
        Bundle b = new Bundle();
        b.putString("defStrID", itemname.toString());
        b.putString("defStrName", listcode[itemname]);
        intent.putExtras(b);
        startActivity(intent);
    }
});
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
        int arg3) {         
    Main.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
}
});
lv1=(ListView)findViewById(R.id.list);
inputSearch=(EditText)findViewById(R.id.inputSearch);
最终字符串listcode[]=getResources().getStringArray(R.array.list);
适配器=新阵列适配器(此,R.layout.list_项,
R.id.产品名称、列表代码);
lv1.设置适配器(适配器);
lv1.setTextFilterEnabled(true);
lv1.setOnItemClickListener(新的OnItemClickListener(){
公共视图单击(适配器视图a、视图v、内部位置、,
长id){
长线=适配器.getItemId(位置);
整数itemname=新整数((int)行);
意图=新意图();
intent.setClass(Main.this、ShowKnot.class);
Bundle b=新Bundle();
b、 putString(“defStrID”,itemname.toString());
b、 putString(“defStrName”,listcode[itemname]);
意向.附加条款(b);
星触觉(意向);
}
});
inputSearch.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列cs、int arg1、int arg2、,
int arg3){
Main.this.adapter.getFilter().filter(cs);
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
});
而不是

long line = adapter.getItemId(position);
您可以在返回列表项位置号的方法参数中使用“位置”

 public void onItemClick(AdapterView<?> a, View v, int position,
        long id) {    

        a.getItemAtPosition(position);
public void onItemClick(适配器视图a、视图v、内部位置、,
长id){
a、 getItemAtPosition(位置);

这里的“int position”参数是列表项的索引。

我尝试了所有选项和int和long,但没有任何效果,当有140个项目时,它打开了一个错误的项目,然后过滤它们是13个,当在正常列表中项目编号为40时,他从0计数到12。我想知道你要实现什么逻辑