2016-08-09 53 views
0

我有一個GridView,我從一個字符串數組中設置一些項目。 該代碼工作正常,但我有一個問題。GridView的項目重新啓動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 
... 

正如我所看到的,當我瀏覽向上/向下它重新從beggining加載數據。 有人可以幫我嗎?我不知道問題出在哪裏。

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:

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(); 
     } 
    }); 
} 

(JUST IN CASE,從 「公用」 文件中的數據是由JSON增加,這一切都不同)

+0

代碼?你在哪裏添加項目到網格 –

+0

MainActivity和CustomGridViewActivity.java – Jose

+0

我的意思是發佈你的代碼,你在網格中添加新的元素,導致問題就像你說的'每次我添加項目,它「添加」其中10個「 –

回答

0

在適配器中的getView()方法移動線在那裏眼下

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

你設置的文本和圖像只有當行正在建新(convertView爲空):您設置的if-else塊的文本和設置畢加索之外。由於該行視圖也將被回收(用於)其他行,因此您最終會收到舊信息,因爲您沒有使用新數據設置以前構建的行。