簡體   English   中英

如何在Android Studio中使用ListView修復“不正確的Onclick”

[英]How to fix 'Incorrect Onclick' with ListView in Android Studio

我的Listview可以正常工作,但是我正在使用SearchView進行搜索以在listview中查找項目。 當我在列表視圖中過濾沒有問題,但是當我在列表視圖中單擊時,那會給​​出錯誤的位置。 我不明白為什么這樣做。 你有什么想法嗎?

上面寫的rulman是我數據庫中的對象。 我搜索了它,然后單擊了它。 但是我的文本框讀取的其他是我數據庫中的對象。 你可以看看這個

ArrayList<String> StokIDFromParse;
    ArrayList<String> StokKoduFromParse;
    ArrayList<String> StokAdiFromParse;
    ArrayList<String> StokFiyatiFromParse;
    ArrayList<String> UrunArama;
    ArrayList<Boolean> KullanimYeriFromParse;
    StokDatas stokDatas;
    ArrayAdapter adapter;
final Context context = this;
EditText stokID,stokKodu,stokAdi,fiyati;
SearchView urunArama;
RadioButton petrolCihazlari,yikamaEkipmanlari;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_stok_olusturr);
    stokID=findViewById(R.id.stokOlusturTextStokID);
    stokKodu = findViewById(R.id.stokOlusturTextStokKodu);
    stokAdi = findViewById(R.id.stokOlusturTextUrunAdi);
    fiyati = findViewById(R.id.stokOlusturTextUrunFiyati);
    petrolCihazlari=findViewById(R.id.stokOlusturRadioPetrolCihazlari);
    yikamaEkipmanlari=findViewById(R.id.stokOlusturRadioYikamaEkipmanlari);
    urunArama = findViewById(R.id.stokOlusturTextUrunArama);
    listView = findViewById(R.id.stokOlusturmaListStokListesi);
    UrunArama = new ArrayList<>();
    StokIDFromParse = new ArrayList<>();
    StokKoduFromParse = new ArrayList<>();
    StokAdiFromParse = new ArrayList<>();
    StokFiyatiFromParse = new ArrayList<>();
    KullanimYeriFromParse = new ArrayList<>();
    stokDatas = new StokDatas(StokIDFromParse,StokKoduFromParse,StokAdiFromParse,StokFiyatiFromParse, this);
    adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,StokAdiFromParse);
    listView.setAdapter(stokDatas);

    VeriGetir();


urunArama.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String s) {
        return false;
}

@Override
public boolean onQueryTextChange(String s) {
    if(!urunArama.toString().equals("")){
        listView.setAdapter(adapter);
        adapter.getFilter().filter(s);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                stokKodu.setEnabled(false);
                stokID.setText(StokIDFromParse.get(i));
                stokKodu.setText(StokKoduFromParse.get(i));
                stokAdi.setText(StokAdiFromParse.get(i));
                fiyati.setText(StokFiyatiFromParse.get(i));
                if (KullanimYeriFromParse.set(i,true)){
                    petrolCihazlari.setChecked(true);
                }
                else if(KullanimYeriFromParse.set(i,false)) {
                    yikamaEkipmanlari.setChecked(true);
                }


            }
        });
    }
    if(urunArama.toString().equals("")) {
        listView.setAdapter(stokDatas);
        stokDatas.notifyDataSetChanged();
    }
    return false;
}
});

// ListView Onclick偵聽器

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            stokKodu.setEnabled(false);
            stokID.setText(StokIDFromParse.get(i));
            stokKodu.setText(StokKoduFromParse.get(i));
            stokAdi.setText(StokAdiFromParse.get(i));
            fiyati.setText(StokFiyatiFromParse.get(i));
            if (KullanimYeriFromParse.set(i,true)){
                petrolCihazlari.setChecked(true);
            }
            else if(KullanimYeriFromParse.set(i,false)) {
                yikamaEkipmanlari.setChecked(true);
            }
        }
    });
}

//接收數據

 public void VeriGetir(){
        ParseQuery<ParseObject> query = ParseQuery.getQuery("tableParcalar");
        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> objects, ParseException e) {
                if (e!=null){
                    Toast.makeText(getApplicationContext(),e.getLocalizedMessage(),Toast.LENGTH_LONG).show();
                }
                else {
                    if (objects.size()>0)
                    {
                        for(final ParseObject object : objects){
                            StokIDFromParse.add(object.getObjectId());
                            StokAdiFromParse.add(object.getString("StokAdi"));
                            StokKoduFromParse.add(object.getString("StokKodu"));
                            StokFiyatiFromParse.add(object.getString("Fiyati"));
                            KullanimYeriFromParse.add(object.getBoolean("KullanimAlani"));
                            stokDatas.notifyDataSetChanged();
                            adapter.notifyDataSetChanged();

                            }

                    }

                }
            }
        });
    }

編輯1:

我嘗試了此方法,但我無法為您提供代碼幫助?

這是我嘗試的新屏幕截圖

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                textlenght=urunArama.toString().indexOf(textlenght);
                for (int j =0; j < StokAdiFromParse.size(); j++){
                    if (textlenght==StokAdiFromParse.get(j).length()){
                        if(urunArama.toString().equalsIgnoreCase((String)StokAdiFromParse.get(i).subSequence(0,textlenght))){
                            int z = j;
                            StokID_SUB.add(StokIDFromParse.get(j));
                            StokName_SUB.add(StokAdiFromParse.get(j));
                            StokKodu_SUB.add(StokKoduFromParse.get(j));
                            StokFiyati_SUB.add(StokFiyatiFromParse.get(j));
                            KullanimYeri_SUB.add(KullanimYeriFromParse.get(j));
                        }
                    }
                }
                stokKodu.setEnabled(false);
                stokID.setText(String.valueOf(StokID_SUB));
                stokKodu.setText(String.valueOf(StokKodu_SUB));
                stokAdi.setText(String.valueOf(StokName_SUB));
                fiyati.setText(String.valueOf(StokFiyati_SUB));

            }
        });



    }

我有同樣的問題, 這里的解決方案很有幫助。

主要的問題在於,點擊偵聽器正在與原始列表進行交互,但與已過濾的列表不進行交互。 因此,問題在於,如果已過濾元素位於第三位置,但位於過濾列表的第一位置,則單擊將與原始(未過濾)列表中第一位置的元素進行交互。

希望這種解釋足以理解這個想法。

暫無
暫無

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

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