簡體   English   中英

在Android的過濾后的ListView中設置項目的原始位置

[英]Set the original position of item in filtered ListView in Android

當我在過濾的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);

        }
    });

  }
}

當您過濾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);

它肯定會工作...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM