Comment puis-je ajouter dynamiquement des images à un GridView?
J'ai un GridView
qui est créé sur la base d'un tableau d'éléments. J'ai besoin d'ajouter plus d'images que vous faites défiler la grille vers le bas, mais je ne suis pas sûr de la façon de le faire.
Maintenant, je ne comprends ce qui suit:
- J'ai un adaptateur qui parcourt le tableau et fournit ImageIds de la classe qui sera de retour le
ImageViews
- De toute façon je dois modifier ce tableau et de laisser l'adaptateur de savoir à ce sujet, donc ma question est, comment puis-je obtenir une référence à cet adaptateur?
C'est mon code:
package com.wm.grid;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.Toast;
public class GridActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Integer[] mThumbIds12 = {
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7,
R.drawable.sample_0, R.drawable.sample_1,
R.drawable.sample_2, R.drawable.sample_3,
R.drawable.sample_4, R.drawable.sample_5,
R.drawable.sample_6, R.drawable.sample_7
};
final Integer[] mThumbIds1 = {
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
R.drawable.sample_2, R.drawable.sample_3,R.drawable.s1,
};
final GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this,mThumbIds12));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(GridActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
gridview.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
//List is idle
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
//Toast.makeText(GridActivity.this, "X", Toast.LENGTH_SHORT).show();
break;
case OnScrollListener.SCROLL_STATE_FLING:
//Toast.makeText(GridActivity.this, "Z", Toast.LENGTH_SHORT).show();
break;
}
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if(firstVisibleItem + visibleItemCount == totalItemCount){
Toast.makeText(GridActivity.this, "BOTTOM", Toast.LENGTH_SHORT).show();
}
//Toast.makeText(GridActivity.this, "TOP", Toast.LENGTH_SHORT).show();
}
});
}
}
Maintenant, il ya certains code redondant, mais c'est mon projet de tests. Tout ce que je sais, c'est que la mise à jour de la carte a arriver quand firstVisibleItem + visibleItemCount == totalItemCount
(c'est à dire lorsque la GridView
a atteint le fond).
C'est mon ImageAdapter
(basé sur Android dev site)
package com.wm.grid;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import com.wm.grid.R;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private Integer[] mThumbIds;
public ImageAdapter(Context c,Integer[] m) {
mContext = c;
mThumbIds = m;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
//create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { //if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(150, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
public Integer[] AddItems(Integer[] a){
final Integer[] aThumbIds;
final int i;
aThumbIds = a;
Integer[] a2 = new Integer[mThumbIds.length + aThumbIds.length];
System.arraycopy(mThumbIds, 0, a2, 0, mThumbIds.length);
System.arraycopy(aThumbIds, 0, a2, mThumbIds.length, aThumbIds.length);
return mThumbIds;
}
}
image.xml
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_item_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/s1"
>
</ImageView>
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout1"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="40pt"
android:text="row three"
android:textSize="15pt" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<GridView
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="150dp"
android:numColumns="auto_fit"
android:verticalSpacing="2dp"
android:horizontalSpacing="2dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
</LinearLayout>
</LinearLayout>
Comment dois-je aborder cette?
OriginalL'auteur user1036005 | 2011-11-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir une référence à la carte de la sauvegarde de la GridView .getAdapter(). Lorsque l'utilisateur défile vers le bas, obtenir cette carte, ajouter de nouvelles images (je pense que vous devriez utiliser une ArrayList au lieu de simples tableaux de sorte que vous pouvez facilement ajouter plus de données dans le ImageAdapter classe), et de l'appeler .notifyDatasetChanged() sur le maintenant modifié adaptateur, afin d'en charge dans les nouvelles données.
Puisque vous savez que c'est en fait un ImageAdapter, juste le jeter. ImageAdapter yourAdapter = (ImageAdapter)yourGrid.getAdapter().
J'ai fait cela: "Toast.makeText(GridActivity.ce, "en BAS", Toast.LENGTH_SHORT).show(); ImageAdapter ia = (ImageAdapter)gridview.getAdapter(); ia.AddItems(mThumbIds1); ia.notifyDataSetChanged(); gridview.invalidate (); " et le résultat est que l'application est woking cependant pas d'images sont ajoutées à la gridview. Il y a seulement ceux qui sont chargés avec le chargement de l'application. Quel est le problème ?
Duuuude Vous êtes un génie. Je l'ai fait. En fait il s'est avéré qu'il était vraiment stupide erreur de ma. Maintenant qu'il est debuged j'ai créer sans fin gridviews .... JE VOUS REMERCIE.
Comment avez-vous accomplir cela? s'il vous plaît pouvez-vous m'aider dans la création d'interminables gridview pour les images..
OriginalL'auteur Zsombor Erdődy-Nagy
Vous devriez être en mesure d'appeler getAdapter sur le contrôle gridview. Ou, il y aurait peut-être pas la meilleure pratique-mais vous pourriez faire de l'Adaptateur statique, ce qui permet d'avoir accès à partir de votre Grille de l'Activité. Ensuite, vous pouvez ajouter des images aux cartes à la volée et de réinitialiser votre disposition.
Lui donner un essai. C'est ce que je ferais. Si vous trouvez une meilleure façon, laissez-moi savoir!
OriginalL'auteur Kyle Clegg