2016-08-09 4 views
0

グリッドビューを使用して、文字列の配列から項目を設定しました。 コードは問題なく動作しますが、問題があります。GridView items restart android

私はアイテムを追加するたびに10個を追加し、アイテム11にジャンプするのではなく、最初のアイテムに戻ります。最終的な結果は次のようなものです:

1. 1 
2. 2 
3. 3 
4. 4 
5. 5 
6. 6 
7. 7 
8. 8 
9. 9 
10. 10 
11. 1 
12. 2 
... 

これまで見てきたように、私が上/下をナビゲートすると、それは先頭からデータをロードし直します。 誰かが私を助けてくれますか?私は問題がどこにあるのか分からない。

CustomGridViewActivity.java:

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import com.squareup.picasso.Picasso; 

public class CustomGridViewActivity extends BaseAdapter { 

    private Context mContext; 
    private final String[] gridViewString; 
    private final String[] gridViewImageId; 

    public CustomGridViewActivity(Context context, String[] gridViewString, String[] gridViewImageId) { 
     mContext = context; 
     this.gridViewImageId = gridViewImageId; 
     this.gridViewString = gridViewString; 
    } 

    @Override 
    public int getCount() { 
     return gridViewString.length; 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(int i, View convertView, ViewGroup parent) { 
     View gridViewAndroid; 
     LayoutInflater inflater = (LayoutInflater) mContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 

      gridViewAndroid = new View(mContext); 
      gridViewAndroid = inflater.inflate(R.layout.gridview_layout, null); 
      TextView textViewAndroid = (TextView) gridViewAndroid.findViewById(R.id.android_gridview_text); 
      ImageView imageViewAndroid = (ImageView) gridViewAndroid.findViewById(R.id.android_gridview_image); 
      textViewAndroid.setText(gridViewString[i]); 
      Picasso 
        .with(mContext) 
        .load(gridViewImageId[i]) 
        .fit() // will explain later 
        .into((ImageView) imageViewAndroid); 
      //imageViewAndroid.setImageResource(gridViewImageId[i]); 
     } else { 
      gridViewAndroid = (View) convertView; 
     } 

     return gridViewAndroid; 
    } 
} 

gridview_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/android_custom_gridview_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/android_gridview_image" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_marginTop="15dp" /> 

    <TextView 
     android:id="@+id/android_gridview_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="5dp" 
     android:textSize="12sp" /> 
</LinearLayout> 

content_main.xml:

<GridView 
    android:id="@+id/grid_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:columnWidth="90dp" 
    android:gravity="center" 
    android:numColumns="auto_fit" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentEnd="true" /> 

Common.java:

//SearchPanel 
    static String[] gridViewString = new String[30]; 
    static String[] gridViewImages = new String[30]; 

MainActivity.java:あなたのアダプタのgetViewメソッド()メソッドは行場所を移動するには

public void Search() { 
    //GridView 
    CustomGridViewActivity adapterViewAndroid = new CustomGridViewActivity(MainActivity.this, Common.gridViewString, Common.gridViewImages); 
    androidGridView=(GridView)findViewById(R.id.grid_view); 
    androidGridView.setAdapter(adapterViewAndroid); 
    androidGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int i, long id) { 
      Toast.makeText(MainActivity.this, "GridView Item: " + Common.gridViewString[+i], Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

(念のため、「一般的な」ファイルからデータをJSONで追加され、それがすべて違う)

+0

コード?あなたはグリッドにアイテムを追加しています –

+0

MainActivityとCustomGridViewActivity.java – Jose

+0

グリッドに新しい要素を追加する場所にコードを投稿することは、「アイテムを追加するたびに」と言ったように問題が発生しました。「10個」を追加します –

答えて

0

あなたは、テキストと画像のみ行が新鮮に建設されている(convertViewいるnull)を設定している今

if (convertView == null) { 
    ... 
} else { 
    ... 
} 
textViewAndroid.setText(gridViewString[i]); 
Picasso 
     .with(mContext) 
     .load(gridViewImageId[i]) 
     .fit() // will explain later 
     .into((ImageView) imageViewAndroid); 
return gridViewAndroid; 

:あなたは、if-elseブロックのテキストおよびセットアップピカソの外側を設定します。その行ビューは他の行にもリサイクル(使用)されるため、以前に構築された行に新しいデータを設定していないため、古い情報が表示されます。