私はアンドロイド開発の初心者です。私が取り組んでいるアプリケーションでは、デフォルトの単純なカーソルアダプターを使用して(サブクラス化していません)、データベースからリストビューにデータが表示されています。
ユーザーが希望する場合は、グリッド ビューにもデータを表示するオプションを追加したいと考えています。
Web でいくつかの例を調べたところ、リスト ビューと同じように見えました。そのため、単純なカーソル アダプターを使用してデータベースからデータを取得し、グリッド ビューに表示します。
最初はすべてのアイテムが正しく表示されています。つまり、スクロールを開始するまでです。その時、すべてが混同されます。
各グリッド ビュー アイテムには 2 つのテキストビューがあり、最初のビューにはタイトルが表示され、2 つ目のビューには説明が表示されます。そのため、スクロールすると、説明が混乱したり、アイテムのタイトルが間違った説明になったりすることがあります。また、グリッド ビュー全体が完全に消えることもあります。
listview でこのような問題が発生したことはなく、常に意図したとおりに機能しました。
ここで何が欠けていますか?あなたの洞察をいただければ幸いです。
アップデート :
スクロール時にグリッド ビューが消えるのは、グリッド ビュー アイテムの高さが不均一であることが原因でした。
私の他の問題は、アダプター用に設定したビューバインダー内にあるようです。次のコードをコメントアウトすると、グリッド ビュー アイテム間の取り違えがなくなります。ビューバインダーのコードは次のとおりです。
adapter.setViewBinder(new ViewBinder() {
public boolean setViewValue(View aView, Cursor aCursor, int aColumnIndex) {
if (aColumnIndex == 3) {
String color = aCursor.getString(aColumnIndex);
aView.setBackgroundColor(Color.parseColor(color));
return true;
}
if (aColumnIndex == 4) {
if (aCursor.getString(5)!=null) {
ViewGroup parentview = (ViewGroup)aView.getParent();
parentview.removeAllViews();
TableLayout tablelayout = new TableLayout (MainActivity.this);
parentview.addView(tablelayout);
int count = Integer.parseInt(aCursor.getString(5));
String[] texts = convertStringToArray(aCursor.getString(4));
String[] cb = convertStringToArray(aCursor.getString(6));
for (int i =0;i<count;i++) {
LayoutInflater inflater = getLayoutInflater();
View checklist_row = inflater.inflate(R.layout.widget_row_layout, null);
TextView tv = (TextView)checklist_row.findViewById(R.id.textView1);
ImageView im = (ImageView)checklist_row.findViewById(R.id.imageView1);
if (cb[i].equalsIgnoreCase("true"))
im.setBackgroundResource(R.drawable.cbc);
tv.setText(texts[i]);
parentview.addView(checklist_row);
}
return true;
}
else {
TextView tv = (TextView) aView.findViewById(R.id.textView2);
tv.setText(aCursor.getString(4));
return true;
}
}
return false;
}
});
これを修正する方法についてのアイデアはありますか?