2012-04-05 4 views
0

Dies ist die Klasse I in den OnClickListener implementieren möchten:Wie richte ich onClickListener für ListView ein, das an einen benutzerdefinierten Adapter gebunden ist?

private void updateUserListView(DatabaseHandler dbh) { 
    List<User> users = dbh.getAllUsers(); 
    ListView listView = (ListView) findViewById(R.id.userslistview); 
    listView.setAdapter(new UserArrayAdapter(BeerFriendActivity.this, users));  
} 

Der Adapter-Code ist:

public class UserArrayAdapter extends ArrayAdapter<User> { 
private final Context context; 
private final List<User> values; 

public UserArrayAdapter(Context context, List<User> values) { 
    super(context, R.layout.userrow, values); 
    this.context = context; 
    this.values = values; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final int pos = position; 
    final Context con = context; 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.userrow, parent, false); 
    Button button = (Button) rowView.findViewById(R.id.userrowbutton); 
    TextView textView = (TextView) rowView.findViewById(R.id.userrownametext); 
    textView.setText(values.get(position).getName()); 

    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent myIntent = new Intent(context,BeerSearchActivity.class); 
      Bundle b = new Bundle(); 
      b.putInt("id", values.get(pos).getId()); 
      myIntent.putExtras(b); //Put your id to your next Intent 
      con.startActivity(myIntent); 
     } 
    }); 

    User user = values.get(position); 
    return rowView; 
}} 

ich den Clicker Umsetzung haben versucht, aber alles, was ich bekommen, ist eine Reihe von Fehlern. Ich habe viele Tutorials und ähnliche Fragen gelesen, aber keine der Antworten scheint zu meiner Situation zu passen oder ich verstehe sie nicht ganz. Jede Hilfe würde sehr geschätzt werden!

+0

Gibt es einen Grund, warum Sie stattdessen in jeder Zeile eine Schaltfläche will von Jede Zeile anklickbar machen? – JRaymond

+0

Ich muss beides passieren. Die Schaltfläche in jeder Zeile funktioniert, aber die ListView-Zeile muss auch anklickbar sein. Die Click-Methode für die ListView-Zeile funktioniert nicht. – user1316202

Antwort

0

ListView ist nicht wirklich so eingerichtet, dass es anklickbare Steuerelemente enthält. Die onClick() - Methoden verwenden das touchEvent anstelle der Zeile. Es gibt jedoch eine Problemumgehung, bei der Sie einen benutzerdefinierten Rückruf in XML für Ihre Schaltfläche oder ein anderes anklickbares Element wie in this example angeben.

+0

Sollte ich darüber nachdenken, es anders zu machen? Es klingt wie ein Knopf in einer Listview ist nicht der richtige Weg, um es zu tun? – user1316202

+0

Wahrscheinlich ... verwende ich nur diese Problemumgehung für die Bevorzugung. Was versuchst du mit OnItemClick und dem Klick auf die Schaltfläche zu tun? – JRaymond

+0

Ich habe 2 Listenansichten zu einer Hauptaktivität. Ich brauche die untere Listenansicht basierend auf dem, was in der ersten Listenansicht ausgewählt wurde. Es muss auch eine Schaltfläche oder einen langen Klick geben, um in jeder Zeile der ersten Listenansicht verschiedene Aktionen auszuführen. – user1316202

0

Das Problem ist im Fokus der button.You sollte in jeder Zeile (Image zum Beispiel) statt Taste andere Ansicht verwenden und onItemClickListener auf Ihre Listview

+0

Sollte ich darüber nachdenken, es anders zu machen? Es klingt wie ein Knopf in einer Listview ist nicht der richtige Weg, um es zu tun? – user1316202

+0

@ user1316202 ja, Schaltfläche in Listenansicht verhindern rowclicking. Aber Sie können onClickListener auf eine beliebige Ansicht setzen, so dass ich die Schaltfläche replcatieren kann –

Verwandte Themen