2016-04-01 9 views
0

Ich habe eine Listenansicht, die mit mehreren Elementen gefüllt werden muss. Zunächst möchte ich die ersten beiden Elemente anzeigen und anschließend die anderen Elemente anzeigen, wenn der Benutzer mit dem Scrollen beginnt.Zeigen Sie 2 erste Elemente in einer Listenansicht und zeigen Sie dann alle Elemente an

Der Code, den ich habe, ist wie folgt:

ListView in XML

<LinearLayout 
     android:id="@+id/layout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:orientation="vertical"> 

     <ListView 
      android:id="@+id/options" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

    </LinearLayout> 

ListView Item Definition

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="52dp" 
    android:gravity="center_vertical" 
    android:background="@color/white"> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginStart="16dp" 
     android:inputType="textMultiLine" 
     android:lines="2" /> 

</RelativeLayout> 

Adapter:

String[] mobileArray = {"Android", "iPhone","Windows", "Mac", "Moto", "Oneplus", "Random A", "Random B", "Random C", "Random D"}; 

ListView listView = (ListView) getActivity().findViewById(R.id.options); 

LinearLayout responseLayout = (LinearLayout) getActivity().findViewById(R.id.layout); 

ArrayAdapter adapter = new ArrayAdapter<String>(getActivity(), R.layout.item, R.id.text,mobileArray); 

listView.setAdapter(adapter); 

listView.setVisibility(View.VISIBLE); 

responseLayout.setVisibility(View.VISIBLE); 

In diesem Beispiel möchte ich zunächst Android und iPhone sichtbar machen, und dann sollte der Benutzer zu den anderen Optionen blättern können.

Derzeit sind alle Optionen sichtbar, wo liege ich falsch?

+0

1. Sie haben nur vier Punkte, ich glaube Sie können scrollbars nicht durch scrollen auf ui .. 2. Sie können es tun, indem scroll listener und wenn sie erreichen ende dann fügen sie zwei weitere artikel zu array und rufen sie 'notifyDatasetChanged();' – Bharatesh

+0

@ bharat Ich kann hinzufügen mehr einzelteile zu Adapter, nehme 10 Dinge an, was mache ich dann? –

+0

dann folgen Sie ... Sie können es tun, indem Sie scroll listener zu listview und wenn Sie Ende erreichen dann fügen Sie zwei weitere Elemente zu array und call notifyDatasetChanged(); ... so wie Paginierung, wenn Sie Ende der ListView hinzufügen mehr Gegenstände dazu. – Bharatesh

Antwort

0

Ich habe das nicht versucht, aber was ist, wenn Sie benutzerdefinierte Adapter und in getView() Null zurückgeben, wenn Sie nicht wollen, dass Element sichtbar ist?

0

Möglicherweise müssen Sie die Listenzellenhöhe dynamisch zuweisen. Um nur die ersten zwei Elemente anzuzeigen, sollte jede Zellenhöhe die Hälfte der Bildschirmgröße betragen.

Sie müssen die HalfscreenHeight für die relative Position des Listenelements festlegen.

0

Erstellen Sie einfach Ihren eigenen benutzerdefinierten Adapter und überschreiben Sie getCount Methode, so dass es 2 zurückgibt, wenn es notwendig ist. Dann, wenn Sie brauchen, um alle Einzelteile zeigen Sie Flag gesetzt sollte, die mitteilen, dass Sie mehr Einzelteile und nach diesem Anruf adapter.notifydatasetchanged

So etwas haben:

class CustomAdapter extends BaseAdapter { 
    private List elements; 
    private boolean showAll; 
    private int resId; 

    public CustomAdapter(List elements, boolean showAll, int resId) { 
     this.elements = elements; 
     this.showAll = showAll; 
     this.resId = resId; 
    } 

    @Override 
    public int getCount() { 
     if (elements == null) { 
      return 0; 
     } else if (elements.size() < 2 || showAll) { 
      return elements.size(); 
     } else { 
      return 2; 
     } 
    } 

    public void setShowAll(boolean showAll) { 
     this.showAll = showAll; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return elements.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //Todo inflate your element 
     return null; 
    } 
} 
+0

Könnten Sie Code hinzufügen, um mir zu sagen, was ich tun soll? –

Verwandte Themen