0

私はアンドロイド開発の初心者です。私が取り組んでいるアプリケーションでは、デフォルトの単純なカーソルアダプターを使用して(サブクラス化していません)、データベースからリストビューにデータが表示されています。

ユーザーが希望する場合は、グリッド ビューにもデータを表示するオプションを追加したいと考えています。

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;

 }
});

これを修正する方法についてのアイデアはありますか?

4

1 に答える 1

0

getView ()メソッドに問題があることを示唆しました。リストビューとグリッドビューでは、データを表示するためにアダプタ クラスを使用します。アンドロイドでは多くのアダプタが使用されます。最初にアダプタの使用方法について読むことをお勧めします。 ここで、アダプターの使用方法を理解するのに役立つリンク ウィッチを 1 つ紹介します。BaseAdapterと、 getView ()メソッドの使用方法に関するコード全体を表示する彼のリンクも使用します。getView メソッドの使用。問題の解決策が得られたことを願っています。

編集:

ここでこのリンクを使用することをお勧めします カーソルアダプターの使用の簡単な例. カーソルアダプターの簡単な例と、問題と同様のこのリンク。Gridview を使用したカーソル アダプター

あなたの答えが得られることを願っています。ありがとう。

于 2013-06-08T04:22:37.167 に答える