GridView Scroll nachjustieren

  • Antworten:5
  • Bentwortet
Volkan Aydin
  • Forum-Beiträge: 187

19.07.2020, 11:58:47 via Website

Hallo Androidpit Team!
Ich stosse wieder an meine Grenzen, insbesondere meine Nerven ;)

Ich versuche gerade einen Gridview zu gestallten, genauer mit meinen eigenen Layouts,
Oben ist ein TextView Titel, zu unters ein Button zum Hinzufügen von Personen, in der mitte die Liste mit den bereits vorhanden Personen in dieser Liste.
Ich habe bereits bemerkt das ich das ganze schon mal vorladen muss mit Firebase, damit die höhe dieser Container richtig dargestellt wird, in diesen Grids.
Nun ist es aber so, wenn beim letztemGrid noch keine Person eingefügt ist, ist dieser Container ja kleiner als die zuvor aufgerufenen. Nun lässt sich aber der Scroll nur soweit runterscrollen wie der letzte Container hoch ist, und ich seh die zuvorgenangen also Container nicht ganz. Wie kann ich das Deaktivieren/Aktivieren oder lösen? Oder soll ich das besser in einer Tabelle lösen?

Vielen Dank und schönen Sonntag schonmal!

Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

20.07.2020, 13:12:29 via Website

Ich bin auch kein Fan der GridView.
Lieber dynamisch mit Linear und RelativeLayout bauen, das geht genauso

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.07.2020, 19:03:27 via Website

Hallo Volkan,

ohne Codeauschnitt und beispielscreenshot ist das ganze sich schwer vorzustellen, dumal wir die Struktur deines Layouts nicht kennen.

Im worstcase muss du unten einfach einen leeren Platzhalter einfüllen, der bei bedarf eingeblednet wird, damit die Elemente sichtbar sind.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

19.07.2020, 21:17:47 via Website

Ich versuche mal eine verkürzte fassung mit den wesentlichem Inhalt zu zeigen: und hoffe, das was du (ihr) braucht, ich glaube es liuegt irgendwo an den einstellungen beim laden des Adapters, oder im Layout des GridViews....

Das Layout ( Container):
xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/standart_boxfullView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/backgroundColor"
android:orientation="vertical">

<LinearLayout
    android:id="@+id/standart_boxfullView2"
    android:layout_width="match_parent"

    android:layout_height="match_parent"
    android:layout_marginStart="@dimen/my_view_margin_m"
    android:layout_marginTop="@dimen/my_view_margin_m"
    android:layout_marginEnd="@dimen/my_view_margin_m"
    android:layout_marginBottom="@dimen/my_view_margin_m"
    android:background="@color/backgroundColorDark"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/standart_box_titel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:gravity="left"
            android:paddingStart="@dimen/my_view_margin_m"
            android:textColor="#000000"
            android:textSize="@dimen/my_text_size_m"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/standart_close"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:paddingStart="@dimen/my_text_size_l"
            android:paddingTop="@dimen/my_text_size_s"
            android:paddingEnd="@dimen/my_text_size_l"
            android:paddingBottom="@dimen/my_text_size_s"
            android:src="@android:drawable/arrow_up_float"
            android:visibility="gone" />

        <ImageView
            android:id="@+id/standart_open"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:paddingStart="@dimen/my_text_size_l"
            android:paddingTop="@dimen/my_text_size_s"
            android:paddingEnd="@dimen/my_text_size_l"
            android:paddingBottom="@dimen/my_text_size_s"
            android:src="@android:drawable/arrow_down_float"
            android:visibility="gone" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/standartBoxViewOhneScroll"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_marginStart="@dimen/my_view_margin_s"
        android:layout_marginTop="@dimen/my_view_margin_s"
        android:layout_marginEnd="@dimen/my_view_margin_s"
        android:layout_marginBottom="@dimen/my_view_margin_s"
        android:orientation="vertical"
        android:paddingBottom="@dimen/my_view_margin_l">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/standart_box_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"></LinearLayout>
        </ScrollView>
    </LinearLayout>

</LinearLayout>

Der Adapter:

public class Turnier_teilnehmer_adapter extends ArrayAdapter<Turnier_teilnehmer_listview> {
private final Context ctx;
private final Activity a;
private final boolean ifTeam;
Logs logs = new Logs("Turnier_teilnehmer_adapter");
private TextView titel;

private FirebaseTable.turnier TURNIER = new FirebaseTable.turnier();
private FirebaseTable.phase PHASE = new FirebaseTable.phase();
private FirebaseTable.gruppe GRUPPE = new FirebaseTable.gruppe();
private FirebaseTable.gruppen_teilnehmer TEILNEHMER = new FirebaseTable.gruppen_teilnehmer();
private FirebaseTable.turnier_teilnehmer_single SINGLE = new FirebaseTable.turnier_teilnehmer_single();
private FirebaseTable.turnier_teilnehmer_teams TEAMS = new FirebaseTable.turnier_teilnehmer_teams();


public Turnier_teilnehmer_adapter(Context ctx, ArrayList<Turnier_teilnehmer_listview> getList, Activity a,boolean ifTeam){
    super(ctx,0,getList);
    this.ctx = ctx;
    this.a = a;
    this.ifTeam = ifTeam;
}

@Override
public View getView(int postition, View converterView, ViewGroup parent){


    logs.i("position",postition);
    View itemView = converterView;
    final Turnier_teilnehmer_listview game = getItem(postition);
    if(itemView== null){
        itemView = LayoutInflater.from(getContext()).inflate(R.layout.standart_box,parent,false);
    }
    String id_user = game.get_id_user();
    String id_gruppe = game.get_id_gruppe();
    String id_phase= game.get_id_phase();
    String id_turnier= game.get_id_turnier();
    DataSnapshot dataSnapshot = game.get_datasnapshot();
    titel = (TextView) itemView.findViewById(R.id.standart_box_titel);
    LinearLayout main = itemView.findViewById(R.id.standart_box_view);

    main.removeAllViews();
    titel.setOnClickListener(gruppenNameAndern(dataSnapshot.getKey(),dataSnapshot.child(GRUPPE.name).getValue(String.class), id_user, id_turnier, id_phase));
            titel.setText(dataSnapshot.child(GRUPPE.name).getValue(String.class));
            loadTeilnehmer(dataSnapshot.getKey(),main,id_user,id_turnier,id_phase,dataSnapshot);

    return itemView;
}

und den GridView:

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="2dp"
android:isScrollContainer="true"
android:numColumns="auto_fit"
android:scrollingCache="false"
android:stretchMode="columnWidth"
android:verticalSpacing="20dp">

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

20.07.2020, 12:47:21 via Website

Vergisst den Quatsch oben, ausser ihr habt wirklich eine sinnvolle lösung ;)

Dieses GridView ist ein bisschen frustrierend. egal was ich versuche, es will nie so, wie ich will :), ich habe nun das Layout so angepasst, das sie eine feste höhe haben, in der hoffnung das darin das ScrollView funktioniert, geht natürlich nicht, dann habe ich versucht es miteinem Layout versucht mit Titel, textliste, und buttons zu lösen, die sind meist nicht anklickbar, das ist doch ein witz!

Für was sind die GridWievs eigentlich zu gebrauchen? nur für einfache Pics mit Text?, kann man da keine komplexen Layouts laden? Jedesmal wenn ich runter oder raufscrolle gehen die Felder mal per lustig oder eben nicht.

Hilfreich?
Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

20.07.2020, 13:12:29 via Website

Ich bin auch kein Fan der GridView.
Lieber dynamisch mit Linear und RelativeLayout bauen, das geht genauso

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

20.07.2020, 13:15:22 via Website

puhh, Danke, bin ich froh das ich nicht der einzige bin..... in den zwei Wochen Ferien die ich jetzt habe, will ich vorwärts kommen, und nicht immer wieder 100 versuche starten, und an dutzenden zahnrädchen hin und her drehen. Ich lagere den Quatsch mal aus und machs mit dem LinearLayout :)

Vielen dank!

Hilfreich?
Pascal P.
Kommentieren