2011-11-07 16 views
0

私は自分のアプリにgridviewを配置し、情報を表示します。あなたは私が私の画面をスクロールすると0に開始し、各正方形のインデックス番号の上に持って見ることができるように、私の数字は、インデックスが再び0を起動して行く17の後に変化し始める後方GridViewにアイテムを表示する問題

http://img202.imageshack.us/img202/8108/39248258.png

ここに私のコードは次のとおりです。

(のonCreate機能)

myGrid = (GridView)findViewById(R.id.grid); 
myGrid.setAdapter(new ImageAdapter(this)); 

マイBaseAdpater:

public class ImageAdapter extends BaseAdapter 
{ 
    Context MyContext; 

    public ImageAdapter(Context _MyContext) 
    { 
     MyContext = _MyContext; 
    } 

    @Override 
    public int getCount() 
    { 
        /* Set the number of element we want on the grid */ 
     return searchResult.size(); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     View MyView = convertView; 

     if (convertView == null) 
     { 

     /*we define the view that will display on the grid*/ 

     //Inflate the layout 
     LayoutInflater li = getLayoutInflater(); 
     MyView = li.inflate(R.layout.item, null); 

     String[] myData = searchResult.get(position); 

     // Add The Text!!! 
     TextView tv = (TextView)MyView.findViewById(R.id.no); 
     tv.setText(" "+ position); 

     TextView ap = (TextView)MyView.findViewById(R.id.apperture); 
     ap.setText(" "+ myData[1]); 

     TextView sp = (TextView)MyView.findViewById(R.id.speed); 
     sp.setText(" "+ myData[2]); 
     } 

     return MyView; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return arg0; 
    } 
} 

そしてitem.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="wrap_content" android:layout_width="wrap_content"> 
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content"> 
     <TextView android:id="@+id/no" android:text="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall"></TextView> 
    </LinearLayout> 
    <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/apperture"></TextView> 
    <TextView android:id="@+id/speed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView"></TextView> 

</LinearLayout> 

あなたは今まで、この問題を見たことがありますか?私は(異なる解像度で)AVDの変更すると問題が別のインデックス番号であなたのgetView方法であなたの助け

答えて

0

あなたの問題はgetViewにあると思います。 (convertView == nullの)かどうかをチェックするとき、あなたは正しくnull以外のビューをreinflateませんが、あなたのif文の外に任意の新しいコンテンツで

移動

String[] myData = searchResult.get(position); 

// Add The Text!!! 
TextView tv = (TextView)MyView.findViewById(R.id.no); 
tv.setText(" "+ position); 

TextView ap = (TextView)MyView.findViewById(R.id.apperture); 
ap.setText(" "+ myData[1]); 

TextView sp = (TextView)MyView.findViewById(R.id.speed); 
sp.setText(" "+ myData[2]); 

それを提供することができません。

+0

ありがとうございました!再膨張ビューがどのように機能していたのか分かりませんでした。 – jukx

+0

リストビューはアイテムビューをリサイクルするので、XMLからの再フレキシビングの高価な操作が不必要に実行されることはありません。リスト項目がオフスクリーンになると、そのビューは、再利用のためにconvertViewとしてAdapter.getViewに渡されます。あなたが今知っているように、あなたはどんな場合でも新しい価値を提供する必要があります。 –

0

ため 感謝を開始convertViewがnullの場合、あなただけのtextViewsの値を更新しています。 Androidは、より効率的になるように、convertViewパラメータを使用してgetViewに古いビューを渡します(毎回新しいビューを作成するのではなく、既に膨らんだビューを再利用する)。