[英]Android Studio TextViews onClick all perform the same action, how do I fix it?
[英]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.