gpt4 book ai didi

java - setOnItemClickListener 不适用于我的自定义适配器

转载 作者:行者123 更新时间:2023-11-30 02:08:59 27 4
gpt4 key购买 nike

我为我的 ListView 实现了自定义适配器,然后我使用函数 setOnItemClickListener 和 getItemAtPosition 从特定列表项中提取对象。但是当我点击一个特定的列表项时,没有任何反应。这是我的自定义适配器的外观:

 private class MyCustomAdapter extends ArrayAdapter<Werkzeug> {

private ArrayList<Werkzeug> werkzeugList;

public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<Werkzeug> werkzeugList) {
super(context, textViewResourceId, werkzeugList);
this.werkzeugList = new ArrayList<Werkzeug>();
this.werkzeugList.addAll(werkzeugList);
}


private class ViewHolder {
CheckBox checkBox;
ImageView imageView;
TextView w_Name;
TextView w_Preis;
TextView w_Waehrung;
TextView w_haeufigkeit;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));

if (convertView == null) {

LayoutInflater vi = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE );
convertView = vi.inflate(R.layout.listview2_layout, null);

holder = new ViewHolder();
holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
holder.imageView = (ImageView) convertView.findViewById(R.id.werkzeugeImage);
holder.w_Name = (TextView) convertView.findViewById(R.id.werkzeugeName);
holder.w_Preis = (TextView)convertView.findViewById(R.id.werkzeugePreis);
holder.w_Waehrung = (TextView) convertView.findViewById(R.id.euro);
holder.w_haeufigkeit = (TextView) convertView.findViewById(R.id.proTag);

convertView.setTag(holder);

preis_TextView = (TextView)findViewById(R.id.preis_textView);

final Manager manager = (Manager)getApplication();

preis_TextView.setText(Integer.toString(manager.getSum()));

holder.checkBox.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v ;
Werkzeug werkzeug = (Werkzeug) cb.getTag();

if(cb.isChecked()) {
manager.setSum( manager.getSum()+ Integer.parseInt(werkzeug.getPreis()) );
preis_TextView.setText(Integer.toString( manager.getSum() ));
manager.listOfSelectedItems.put(werkzeug.getName(), werkzeug);
}
else {
manager.setSum( manager.getSum()- Integer.parseInt(werkzeug.getPreis()) );
preis_TextView.setText(Integer.toString( manager.getSum() ));
manager.listOfSelectedItems.remove(werkzeug.getName());
}

werkzeug.setCheckBoxState(cb.isChecked());
}
});

}
else {
holder = (ViewHolder) convertView.getTag();
}

Werkzeug werkzeug = werkzeugList.get(position);

holder.imageView.setImageResource(werkzeug.getBild());
holder.w_Name.setText(werkzeug.getName());
holder.checkBox.setChecked(werkzeug.isCheckBoxState());
holder.w_Preis.setText(werkzeug.getPreis());
holder.w_Waehrung.setText(werkzeug.getWaehrung());
holder.w_haeufigkeit.setText(werkzeug.getHauefigkeit());

holder.checkBox.setTag(werkzeug);

return convertView;

}

}

这是 Werkzeug.java

public class Werkzeug {

private String name;
private String preis;
private String waehrung;
private String hauefigkeit;
private int bild;
private boolean checkBoxState = false;

public Werkzeug ( String name, String preis, String waehrung, String hauefigkeit, int bild, boolean checkBoxState){

this.name = name;
this.preis = preis;
this.waehrung = waehrung;
this.hauefigkeit = hauefigkeit;
this.bild = bild;
this.checkBoxState = checkBoxState;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPreis() {
return preis;
}

public void setPreis(String preis) {
this.preis = preis;
}

public String getWaehrung() {
return waehrung;
}

public void setWaehrung(String waehrung) {
this.waehrung = waehrung;
}

public String getHauefigkeit() {
return hauefigkeit;
}

public void setHauefigkeit(String hauefigkeit) {
this.hauefigkeit = hauefigkeit;
}

public int getBild() {
return bild;
}

public void setBild(int bild) {
this.bild = bild;
}

public boolean isCheckBoxState() {
return checkBoxState;
}

public void setCheckBoxState(boolean checkBoxState) {
this.checkBoxState = checkBoxState;
}
}

这是我调用 SetOnItemClickListener() 的 OnCreate() 中的函数:

private void displayListView() {

//Array list of Werkzeuge
ArrayList<Werkzeug> werkzeugList = new ArrayList<Werkzeug>();

for (int i = 0; i < werkzeuge_name.length; ++i){

Werkzeug werkzeug = new Werkzeug(werkzeuge_name[i], werkzeuge_preis[i], werkzeuge_waehrung[i],
haeufigkeit[i], werkzeuge_bild[i], false);
werkzeugList.add(werkzeug);
}


//create an ArrayAdapter from the String Array
dataAdapter = new MyCustomAdapter(this, R.layout.listview2_layout, werkzeugList);
final ListView listView = (ListView) findViewById(R.id.list_View);

// Assign adapter to ListView
listView.setAdapter(dataAdapter);


// This Function doesnt work
listView.setOnItemClickListener(

new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

Werkzeug w = (Werkzeug)( listView.getItemAtPosition(position));

Toast.makeText(getBaseContext(), w.getName(), Toast.LENGTH_SHORT).show();
}
}
);
}

当我点击一个特定的列表项时,没有任何反应。我不知道出了什么问题。

最佳答案

将此行放在 listview2layout 的根元素中。为我工作。

android:descendantFocusability="blocksDescendants"

关于java - setOnItemClickListener 不适用于我的自定义适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30376835/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com