setOnItemClickListener

setOnItemClickListener

我已经为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;
    }
}





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



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/

10-10 07:01