私は単語のリストを持っています。リスト内の各単語の文字をGridViewに画像として表示したい。GridViewをListViewに追加する方法
私は単語のリストのために、カスタムアダプタ、WordListAdapterを作成することでこれの作業バージョンを実装しました。各単語について、WordListAdapter.getViewはカスタムアダプタLetterImageAdapterを呼び出して、単語に文字を表示します。私はAndroidプログラミングが初めてのので、これが良いアプローチであるかどうかは疑問です。確かに多くの仕事のようです。それが良いアプローチであれば、おそらくこれは他の人に役立つでしょう。
私はListView内のGridVeiwについて他にも多くの記事を見てきました。多くの人がスクロールとメモリに関する問題に触れていましたが、このユースケースに特有の問題はありませんでした。私の活動で
:
@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);
}
}
ありがとうございます!ですから、LinearLayoutの内部でListViewが必要なように聞こえるので、画像を繰り返し処理することができます。 btw、私はあなたの答えを受け入れるようにチェックしましたが、投票は見ません。 – user6627139
実際、私はリストビューアイテムとして画像を持つLinearLayoutsを意味していました。私の重要なポイントは、ネストされたリストウィジェットを避けることです – rupps