当我选择过滤的ListView
中的项目时,我希望获得原始位置。
这是我的简单代码。
我的问题是在过滤列表视图中设置旧位置而不是新位置:
public class MainActivity extends AppCompatActivity {
EditText sr;
ListView lv_sr;
String[] titre;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sr = (EditText) findViewById(R.id.sr);
lv_sr = (ListView) findViewById(R.id.lv_sr);
titre = getResources().getStringArray(R.array.titre);
adapter = new ArrayAdapter<String>(this, R.layout.row_itme, R.id.row_text, titre);
lv_sr.setAdapter(adapter);
initEvent();
}
private void initEvent() {
sr.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
MainActivity.this.adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
lv_sr.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent km = new Intent(MainActivity.this, Webhtml.class);
km.putExtra("page",position); -------- this is my problem
startActivity(km);
}
});
}
}
答案 0 :(得分:1)
过滤ListView时,每个过滤后的View位置也会根据过滤后的视图数量而变化。因此,如果要在适配器上获取原始位置(过滤前的上一个位置或位置),请在OnItemClickListener上创建。你不能再那样了。
您可以创建隐藏字段以保留原始位置。
String itemName = (String) parent.getItemAtPosition(position);
int position_fo_item = Arrays.asList(titre).indexOf(itemName);
Intent km = new Intent(MainActivity.this, Webhtml.class);
km.putExtra("page",position_fo_item);
startActivity(km);
如果不起作用,则将另一个数组创建为'titre_original',并将其指定为'titre'。然后用它来获得像
这样的位置String[] titre_original;
titre_original = getResources().getStringArray(R.array.titre);
int position_fo_item = Arrays.asList(titre_original).indexOf(itemName);
一定会有用......