2015-12-27 66 views
5

Ho un progetto in Android Studio con un listview personalizzato. il mio ListView personalizzato contiene 2textbox e un interruttore e ImageButton ma i cant trovare il modo di impostare onclicklistener o in un altro ascoltatori per loro in classe listadapteronclicklistener per il pulsante in un elenco

qui è la mia listadapter:

public class listadapter extends ArrayAdapter { 
    Context context_; 
    int resource_; 
    ArrayList<reminders> objects_; 
    boolean bool; 
    DBAdapter db; 

    public listadapter(Context context, int resource, ArrayList<reminders> objects) { 
     super(context, resource, objects); 
     context_ = context; 
     resource_ = resource; 
     objects_ = objects; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context_.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View ViewRow = inflater.inflate(R.layout.reminders_list_layout, parent, false); 
     TextView nametxt, addresstxt; 
     Switch sw; 
     ImageView imgview; 
     nametxt = (TextView) ViewRow.findViewById(R.id.remindername); 
     addresstxt = (TextView) ViewRow.findViewById(R.id.reminderaddress); 
     sw = (Switch) ViewRow.findViewById(R.id.remindersw); 
     imgview = (ImageView) ViewRow.findViewById(R.id.imageView4); 
     nametxt.setText(objects_.get(position).name); 
     addresstxt.setText(objects_.get(position).address); 
     bool = (objects_.get(position).swbool != 0); 
     sw.setChecked(bool); 
     imgview.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       View parentRow = (View) v.getParent(); 
       ListView listView = (ListView) parentRow.getParent(); 
       final int position = listView.getPositionForView(parentRow); 
       Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show(); 
      } 
     }); 
     return ViewRow; 
    } 

ma quando sto testando il mio progetto e cliccando su imageview mi dà forceclose e questo errore in logcat

12-27 20:58:50.343 5658-5658/com.amir_p.yadambendaz E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.amir_p.yadambendaz, PID: 5658 
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView at com.amir_p.yadambendaz.listadapter$1.onClick(listadapter.java:49) 

cosa posso fare?

risposta

3

Provare a cambiare

public View getView(int position, View convertView, ViewGroup parent) { 
    ... 
    @Override 
    public void onClick(View v) { 
     View parentRow = (View) v.getParent(); 
     ListView listView = (ListView) parentRow.getParent(); 
     ... 
} 

a

public View getView(int position, View convertView, final ViewGroup parent) { 
    ... 
    @Override 
    public void onClick(View v) { 
     ListView listView = (ListView) parent; 
     ... 
} 
+1

'parent' è il genitore che alla fine la vista' convertView' verrà allegata. 'convertView's sono file listview, e' parent' è il 'ListView' che conterrà loro. –

0

View parentRow = (Visualizza) v.getParent(); ListView listView = (ListView) parentRow.getParent(); Stai scrivendo un listener per imageview e ottenere un genitore da un'immagine restituirà una riga di listview. Qui parentRow.getParent() è una riga in listView che è un layout e lo si lancia in listview.

1

Il modo più semplice è utilizzare il tag.
È possibile utilizzare il seguente codice.

imgview.setTag(new Integer(position); 
imgview.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) {    
     final int position = (Integer)v.getTag();    
     Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show(); 
    } 
}); 

Se si desidera salvare un altro oggetto in tag, è possibile utilizzare setTag(int key, Object object) per postion risparmio.

Per ottenere Listview, è possibile utilizzare il seguente codice.

ListView listview = (ListView) v.getParent() //item view 
     .getParent() //Linear Layout in listview 
     .getParent();//ListView