Gewusst wie: gridview-innen ein fragment?
Ich möchte ein gridview wie android market, ich möchte füllen Sie diese mit Bildern aus einer Datenbank im internet. es müssen für die Arbeit mit androidv4.Unterstützung, denn ich will laufen 2.2 bis 4.0.
Jemand sagte, dass ist nicht möglich, erstellen Sie ein gridview-Steuerelement in der pre-4.0, ist es wahr?
Allerdings funktioniert Es nur, wenn ich verwenden setListAdapter()
, aber es zeigt nur ein Bild pro Zeile, wie ein listview, wenn ich auf gridview.setAdapter()
es doenst Arbeit mehr.
Hier ist mein Versuch:
Dies ist die Klasse ListFragment:
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);
}
Dies ist ImageAdapter Klasse:
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;
}
}
Könnte es helfen, eine Menge, wenn jemand eine Probe. Dank
InformationsquelleAutor Marckaraujo | 2012-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte dies funktionieren, kann man einfach nicht verwenden Sie ein gridView-Steuerelement in einem
ListFragment
- nur mit einem einfachen altenFragment
statt, wenn Sie gehen, um die manuelle Verwaltung der grid-sowiesoAuch, den Punkt zu prüfen, wenn convertView null ist, ist zu tun, Ansicht recycling - OS deklariert genug views um den Bildschirm zu füllen und nicht mehr, also, wenn Sie einen Bildlauf durchführen, dann kann es die Wiederverwendung der Ansicht, anstatt aufblasen, um eine neue. Ändern Sie Ihre getView() etwa so nutzen:
Auch getView ist nicht eine Funktion von BaseAdapter, versuchen Sie die Umstellung auf ArrayAdapter statt. Als Randbemerkung, verwenden Sie immer
@Override
wenn du denkst du bist überschreiben einer Basis-Funktion - so dass der compiler meldet einen Fehler, wenn Sie einen Fehler machenein Hinweis wurde Hinzugefügt, über die GetView - ich weiß nicht, ob es dein problem, aber es könnte helfen - wo sind die URL ' s aus?
Noch nichts, ich habe gerade den code aktualisieren, zu zeigen, wo die URL herkommt.
sieht aus wie du bist, die sich von BaseAdapter, die nicht mit getView. Die Nutzung eines ArrayAdapter<String> statt - die meisten Dinge sind die gleichen, also sollte es nicht allzu schwer sein, zu migrieren: developer.android.com/reference/android/widget/...
gut? was ist passiert?
InformationsquelleAutor JRaymond
Mit einem
GridView
imFragment
sollte es nicht anders sein, als in einemActivity
. Einen offensichtlichen Fehler sehe ich mit deinem code ist, dass Sie das aufblasen eines layout inonActivityCreated
und dann sofort ignorieren. Stattdessen sollten Sie alles tun, Ihrer Ansicht Initialisierung inonCreateView
die bequem bietet eineLayoutInflater
.Als für sein Aktuelles Verhalten, es macht sehr viel Sinn, warum es wirkt, wie es ist. Ich glaube, dass
ListFragment
bläst ein layout, enthält eineListView
wenn der Programmierer nicht bieten (was Sie derzeit nicht sind). DieImageAdapter
Sie Einstellung wird dann verwendet, um dieView
s zu denListView
.So verschieben Sie alle Ihre code, der in
onActivityCreated
zuonCreateView
und es sollte funktionieren. Sollten Sie nicht außer Kraft setzen müssenonActivityCreated
überhaupt, es sei denn, Sie müssen etwas tun, mit speziellen mit derActivity
wenn IhrFragment
befestigt ist.Und wie für die Verwendung
GridView
pre-4.0 -GridView
ist seit API-level-1-so würde ich Wetten, dass es ist in Ordnung, um es für alle Android-API-levels.InformationsquelleAutor marczych