Ich habe eine Liste von Wörtern. Ich möchte, dass die Buchstaben jedes Worts in der Liste als Bilder in einer GridView angezeigt werden.Wie man GridView zu ListView hinzufügt
Ich habe eine funktionierende Version von diesem implementiert, indem ich einen benutzerdefinierten Adapter, WordListAdapter, für meine Liste der Wörter erstelle. Für jedes Wort ruft WordListAdapter.getView wiederum einen benutzerdefinierten Adapter, LetterImageAdapter, auf, um die Buchstaben in den Wörtern anzuzeigen. Da ich neu in der Android-Programmierung bin, frage ich mich, ob das ein guter Ansatz ist. Es scheint eine Menge Arbeit zu sein. Wenn es ein guter Ansatz ist, wird dies vielleicht für jemand anderen hilfreich sein.
Ich habe eine Reihe von anderen Posts über GridVeiws in ListViews gesehen. Viele von ihnen berührten Probleme mit dem Scrollen und dem Speicher, aber ich sah für diesen Anwendungsfall nichts Spezielles.
In meiner Tätigkeit:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
ListView listView = (ListView) findViewById(R.id.wordList);
listView.setAdapter(new WordListAdapter(this, new String[]{"ABC", "DEF"}));
}
WordListAdapter.getView()
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.word_grid, null);
GridView gridView = (GridView) convertView.findViewById(R.id.word_grid_id);
holder = new ViewHolder();
holder.gridView = gridView;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.gridView.setAdapter(new LetterImageAdapter(mContext, words[position]));
return convertView;
}
private static class ViewHolder {
GridView gridView;
}
LetterImageAdapter.getView()
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.letter_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.list_item_letter_imageview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// resource for each letter is in lettersId array
holder.icon.setImageResource(letterIds[position]);
return convertView;
}
private static class ViewHolder {
ImageView icon;
}
// transform word into array of resources for each letter
private void buildResourceArray(String packageName) {
letterIds = new int[theWord.length()];
for (int index = 0; index < theWord.length(); index++) {
letterIds[index] = getResourceId(theWord.substring(index, index + 1).toLowerCase(), "drawable", packageName);
}
}
Danke! Es klingt also so, als würde ich eine ListView innerhalb des LinearLayouts benötigen, damit ich über die Bilder iterieren kann. Übrigens, ich habe überprüft, ob ich deine Antwort akzeptiere, sehe aber keine Abstimmung. – user6627139
Eigentlich meinte ich LinearLayouts mit Bildern als ListView Items. Mein Hauptpunkt ist, geschachtelte Listenwidgets zu vermeiden – rupps