2017-05-14 5 views
0

Ich schreibe kleine Spiel-App für die Zuordnung, wie "Memory" -Spiel. Ich möchte GridView verwenden und ImageButtons darin einfügen, um ein Bild 9 mal anzuzeigen, und onClickListener einstellen, um eine Zufallszahl unter jedem Bild anzuzeigen. Ich setze Gridview im Layout, benutze ID, um darauf zuzugreifen, setze Adapter, um es zu füllen, aber es funktioniert nicht, und ich bekomme keinen Fehler. Außerdem habe ich versucht herauszufinden, was in meinem Code falsch ist, aber gescheitert.Füllen GridView mit ImageButtons mit Adapter funktioniert nicht

Problem ist, wenn ich app starte, es ist leer, nichts auf emutaor Bildschirm.

Hilfe. Hier ist meine Adapterklasse:

public class ImageButtonAdapter extends BaseAdapter { 

ImageButton[] buttons; 
public Context c; 
public ImageButtonAdapter(Context c) { 
    this.c = c; 
    buttons = new ImageButton[9]; 
    for (int i=0;i<buttons.length;i++) { 
     buttons[i] = new ImageButton(c); 
     buttons[i].setImageResource(R.mipmap.gmicon); 
     buttons[i].setLayoutParams(new GridView.LayoutParams(300,300)); 
     buttons[i].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Button btn = (Button)v; 
       btn.setText("5"); 
      } 
     }); 
    } 
} 


@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    return null; 
} 
} 

Hier ist gameActivity:

public class GameActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game_layout); 
    GridView gv = (GridView)findViewById(R.id.grid); 
    ImageButtonAdapter adapter = new ImageButtonAdapter(this); 
    gv.setAdapter(adapter); 
} 
} 

Jeder kann dabei helfen mir zu sagen, was das Problem ist? Vielen Dank.

Antwort

0

Wir haben getView() -Methode orverride Für jedes Element in gridview oder Listview zu zeigen.

beziehen sich diese - https://developer.android.com/reference/android/widget/Adapter.html

public class ImageButtonAdapter extends BaseAdapter { 

    ImageButton[] buttons; 
    public Context c; 
    public ImageButtonAdapter(Context c) { 
     this.c = c; 
     buttons = new ImageButton[9]; 
    } 


@Override 
public int getCount() { 
    return buttons.length; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    convertView = new ImageButton(c); 
    buttons[position] = convertView; 
    buttons[position].setImageResource(R.mipmap.gmicon); 
    buttons[position].setLayoutParams(new GridView.LayoutParams(300,300)); 
    buttons[position].setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Button btn = (Button)v; 
      btn.setText(position + ""); 
     } 
    }); 
    return convertView; 
} 

}

0

Machen Sie getCount Rückkehr buttons.length

@Override public int getCount() 
    { 
    return buttons.length; 
    } 
+0

Jetzt habe ich Fehler: FATAL AUSNAHME: Haupt Prozess: com.androidassignment, PID: 10879 java.lang.NullPointerException: Versuch aufzurufen virtuelle Methode 'int android.view.View.getImportantForAccessibility()' für eine Nullobjekt-Referenz – Mystiq

Verwandte Themen