在Android中过滤后的ListView中设置项目的原始位置

时间:2016-12-21 10:57:46

标签: android listview

当我选择过滤的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);

        }
    });

  }
}

1 个答案:

答案 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);

一定会有用......