Ich versuche ein GridView zu erstellen, das einige Schaltflächen enthält. Die Schaltflächen werden gefüllt, aber OnItemClickListener() wird nicht aufgerufen, wenn auf eine Schaltfläche in der GridView geklickt wird.OnItemClickListener wird nicht auf Button in GridView aufgerufen
Tierbew Klassencode
gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new ButtonAdapter(getApplicationContext(),answer));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
flipper.showNext();
}
});
Benutzerdefinierte Schaltfläche Adapter
public class ButtonAdapter extends BaseAdapter{
private Context context;
private int[] numbers = new int[100];
private String[] answer;
public ButtonAdapter (Context context,String[] answer){
this.context = context;
this.answer = answer;
for(int i=0;i<100;i++){
numbers[i] = i+1;
}
}
@Override
public int getCount() {
return numbers.length;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View gridView;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(view == null) {
gridView = new View(context);
gridView = inflater.inflate(R.layout.adapter, null);
} else {
gridView = (View) view;
}
Button button = (Button) gridView.findViewById(R.id.adapter_button);
button.setText(numbers[i]+"");
if(answer[i].equals("null"))
button.setBackgroundColor(context.getResources().getColor(R.color.reset));
else
button.setBackgroundColor(context.getResources().getColor(R.color.optionCheck));
return gridView;
}
}
adapter.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/adapter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
acitvity_layout.xml
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:numColumns="5"
android:columnWidth="50dp"
android:stretchMode="columnWidth"
android:layout_below="@+id/back"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
Sie hängen an den setOnItemClickListener von gridView, das sollten die Buttons 'setOnItemClickListener' sein? – JeffUK
Ich folge den Android-Dokumenten (https://developer.android.com/guide/topics/ui/layout/gridview.html). Hier wird setOnItemClickListener auf die Gridview und nicht auf das darin enthaltene Element gesetzt. –
@JeffUK Seine Schaltflächen liegen innerhalb der Gridview, die er von adapter.xml auffüllt. Ich bin skeptisch gegenüber seiner getView-Implementierung, bei der er eine neue Ansicht erstellt und zurückgibt. Warum nicht dieselbe Ansicht zurückgeben, die er in Argumenten weitergegeben hat! –