Comment: gridview à l'intérieur d'un fragment?
Je veux créer un gridview comme l'android market, je veux le remplir avec des images à partir d'une base de données sur internet. il faut travailler avec androidv4.soutien, car je veux courir jusqu'à 2.2 4.0.
Quelqu'un a dit, ce n'est pas possible de créer un gridview en pré-4.0, est-il vrai?
Toutefois, Il ne fonctionne que quand je mets l'utilisation setListAdapter()
, mais il ne montre qu'une seule image par ligne, comme un listview, lorsque je change de gridview.setAdapter()
, il doenst fonctionne plus.
Voici mon essai:
C'est le ListFragment classe:
public static class ArrayListFragment extends ListFragment implements OnScrollListener{
ImageAdapter adapter = new ImageAdapter();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LayoutInflater gridInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = gridInflater.inflate(R.layout.imagelist, null);
GridView gridView = (GridView) v.findViewById(R.id.list);
ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;
// ImageAdapter imageAdapter = new ImageAdapter();
adapter.getImageDownloader().setMode(mode);
setListAdapter(adapter);
// gridView.setAdapter(adapter);
getListView().setOnScrollListener(this);
}
C'est ImageAdapter classe:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private final ImageDownloader imageDownloader = new ImageDownloader();
public static int count = 10;
private final String[] URLS = {
"http://lh5.ggpht.com/_mrb7w4gF8Ds/TCpetKSqM1I/AAAAAAAAD2c/Qef6Gsqf12Y/s144-c/_DSC4374%20copy.jpg",
"http://lh5.ggpht.com/_Z6tbBnE-swM/TB0CryLkiLI/AAAAAAAAVSo/n6B78hsDUz4/s144-c/_DSC3454.jpg",
"http://lh3.ggpht.com/_GEnSvSHk4iE/TDSfmyCfn0I/AAAAAAAAF8Y/cqmhEoxbwys/s144-c/_MG_3675.jpg",
"http://lh6.ggpht.com/_Nsxc889y6hY/TBp7jfx-cgI/AAAAAAAAHAg/Rr7jX44r2Gc/s144-c/IMGP9775a.jpg",
"http://lh3.ggpht.com/_lLj6go_T1CQ/TCD8PW09KBI/AAAAAAAAQdc/AqmOJ7eg5ig/s144-c/Juvenile%20Gannet%20despute.jpg",
};
public int getCount() {
return count;
}
public String getItem(int position) {
return URLS[position];
}
public long getItemId(int position) {
return URLS[position].hashCode();
}
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
v = LayoutInflater.from(mContext).inflate(R.layout.image_text_view,null);
v.setLayoutParams(new GridView.LayoutParams(200,200));
ImageView imageview = (ImageView)v.findViewById(R.id.image);
imageview.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageview.setPadding(6, 6, 6, 6);
imageDownloader.download(URLS[position], imageview);
}
else {
v = convertView;
}
return v;
}
public ImageDownloader getImageDownloader() {
return imageDownloader;
}
}
Il pourrait aider beaucoup si quelqu'un a un exemple. Grâce
OriginalL'auteur Marckaraujo | 2012-04-23
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner correctement, vous juste ne pouvez pas utiliser un gridView dans un
ListFragment
- il suffit d'utiliser un simple vieuxFragment
au lieu de cela, si vous allez être manuellement la gestion de la grille de toute façonAussi, le point de vérifier si convertView est nulle est de faire afficher le recyclage - l'OS ne déclare assez de vues pour remplir l'écran et pas plus, donc si vous faites défiler puis il peut réutiliser la vue au lieu d'avoir à gonfler un nouveau. Changer votre getView() comme pour prendre avantage:
Aussi, getView n'est pas une fonction de BaseAdapter, essayez de passer à ArrayAdapter à la place. Comme une note de côté, utilisez toujours
@Override
quand vous pensez que vous êtes remplacement d'une fonction de base du fait que le compilateur vous donnera un message d'erreur si vous faites une erreurajout d'une note sur GetView - je ne sais pas si c'est votre problème, mais il pourrait aider - où sont les URL en venir?
Rien encore, je viens de mettre à jour le code pour afficher lorsque l'adresse URL.
on dirait que vous êtes s'étendant à partir de BaseAdapter, qui n'utilise pas de getView. Utiliser un ArrayAdapter<String> au lieu de cela - la plupart des choses sont les mêmes, donc il ne devrait pas être trop dur à migrer: developer.android.com/reference/android/widget/...
bien? ce qui s'est passé?
OriginalL'auteur JRaymond
À l'aide d'un
GridView
dans unFragment
ne devrait pas en être autrement que de l'utiliser dans unActivity
. Une flagrante erreur que je vois avec votre code, c'est que vous êtes gonflant une mise en page dansonActivityCreated
, puis rapidement l'ignorer. Au lieu de cela vous devez faire tout votre point de vue de l'initialisation dansonCreateView
qui offre idéalement uneLayoutInflater
pour votre utilisation.Que pour son comportement actuel, il fait beaucoup de sens, pourquoi il agit comme ça. Je crois que
ListFragment
gonfle une mise en page qui contient unListView
si le programmeur n'a pas à fournir de l'un (qui ne sont pas actuellement). LeImageAdapter
vous êtes paramètre est ensuite utilisé pour fournir laView
s à laListView
.Afin de déplacer l'ensemble de votre code qui est dans
onActivityCreated
àonCreateView
et cela devrait fonctionner. Vous ne devriez pas avoir besoin de remplaceronActivityCreated
à tous sauf si vous avez besoin de faire quelque chose de spécial avec leActivity
lorsque votreFragment
est attaché à elle.Et que l'utilisation
GridView
avant 4.0 -GridView
a été autour depuis l'API de niveau 1 donc je serais prêt à parier que c'est bien de l'utiliser pour toutes les API Android niveaux.OriginalL'auteur marczych