1

Ich weiß, dass es schon einige Fragen für dieses Problem gibt, da ich eine Stunde gesucht habe, aber keine von beiden hat mein Problem gelöst, noch ist die Lösung zu alt.Mehrere GridView im selben scrollbaren Layout/Fragment hinzufügen

Ich arbeite an einer Event-App und zeigt die Anwesenheit von Leuten an, die zu ihr gehen. Es muss zwei GridView haben: JA und NEIN, je nach Anwesenheit, und es zeigt das Bild der Gäste.

Ich habe bereits die "YES" GridView gemacht und habe versucht, eine neue TextView und GridView zu meinem Layout hinzufügen + bekommen das Layout davon in Java für meine "Nein" GridView , aber es zeigt nur die erste.

Was mache ich falsch? Ich verwende Fragmente für jeden meiner Tabs.

Dies ist, was ich vs. was ich will:

This is my app, just showing one GridView: enter image description here

Dieses Layout mein Fragments ist:

[fragment_one.xml] 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context="com.example.example.MainActivity.OneFragment"> 

<TextView android:id="@+id/title_yes" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="14dp" 
android:text="Yes" 
android:textAllCaps="true" 
android:textSize="14sp" 
android:fontFamily="sans-serif-regular" /> 

<GridView android:id="@+id/gridview_yes" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/title_yes" 
    android:numColumns="4" 
    android:verticalSpacing="2dp" 
    android:horizontalSpacing="2dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" /> 

<TextView android:id="@+id/title_no" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="14dp" 
    android:text="No" 
    android:textAllCaps="true" 
    android:textSize="14sp" 
    android:fontFamily="sans-serif-regular" /> 

<GridView android:id="@+id/gridview_no" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/title_no" 
    android:numColumns="4" 
    android:verticalSpacing="2dp" 
    android:horizontalSpacing="2dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" /> 

</LinearLayout> 

Dies ist Java meines Fragment:

public class OneFragment extends Fragment { 

    public OneFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_one, container, false); 
     GridView gridViewYes = (GridView) view.findViewById(R.id.gridview_yes); 
     GridView gridViewNo = (GridView) view.findViewById(R.id.gridview_no); 
     gridViewYes.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity() 
     gridViewNo.setAdapter(new ImageAdapter(view.getContext())); // uses the view to get the context instead of getActivity() 

    gridViewYes.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      Toast.makeText(getActivity(), "Esta es la imagen " + position + ".", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
    } 

} 
+0

Verwendung mit einem Layout-Manager wie dies ein RecyclerView https://github.com/TonicArtos/SuperSLiM ist –

Antwort

1

Gridview ist wahrscheinlich nicht die beste Wahl hier . Dieses Widget soll verwendet werden, wenn Sie eine potenziell lange Liste von Dingen haben, die in einem Scroll-Container angezeigt werden sollen. TableView ist besser, wenn Sie eine überschaubare Menge von Elementen haben, die kein eigenes Scroll-Verhalten benötigen.

Wahrscheinlich möchten Sie auch keine layout_height von match_parent für diese Dinge. Verwende wrap_content, um sie nur so groß zu machen, wie es ihr Inhalt vorschlägt.

Wenn Sie die ganze Sache zu scrollen brauchen, weil Sie sich nicht sicher sind, setzen Sie das LinearLayout in eine ScrollView und bestimmen Sie, ob die Sammlung von Tabellen und Text scrollbar sein soll, wenn sie zu groß sind der zugeteilte Raum.

+0

Vielen Dank für Ihre Anregungen Doug wirklich nützlich! Ich habe mein Problem gelöst, indem ich die layout_height von GridView geändert habe, was könnte meine App beeinflussen, wenn ich es als GridView lasse und nicht zu TableLayout? Warum sagst du, es ist besser? –

+0

Das Stapeln mehrerer Komponenten, die selbst scrollen können (wie GridView), kann die Benutzeroberfläche unbrauchbar machen, wenn sie groß werden. Vielleicht funktioniert es gerade mit einem bestimmten Datensatz, aber es funktioniert möglicherweise nicht gut in der Zukunft, wenn Sie mehr Daten erhalten und alles größer als der verfügbare Speicherplatz wird. –

+0

Zwei letzte Dinge Doug. 1. Benötige ich das TableLayout, auch wenn ich ScrollView verwende, um mein LinearLayout mit den beiden GridViews zu verschachteln, oder wird es immer noch Probleme geben, wenn GridViews zu groß werden? Und 2. Was denkst du über ein anderes Layout wie GridLayout oder mehrere LinearLayouts? –

1

Ihr Problem ist, dass Sie GridView ja Höhe auf match_parent gesetzt haben.

android:layout_height="match_parent" 

Sie sollten wie folgt ändern:

android:layout_height="wrap_content" 
+0

Einfach aber nützlich zur Hölle, vielen Dank Herr, das war mein Problem! –

+0

Ich bin froh zu helfen. Akzeptiere es als Antwort, um Menschen mit dem gleichen Problem in der Zukunft zu helfen. –