Limit what a ListView shows on Android

0

I have a realm database with 10 items, how do I make the adapter so that it only shows some items ListView ? For example, 3 or 4.

I have this adapter:

package bondi.developedsudaka.bondi.Adapters;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.List;

import bondi.developedsudaka.bondi.Models.Card;
import bondi.developedsudaka.bondi.R;


public class CardAdapter extends BaseAdapter {

    SimpleDateFormat df = new SimpleDateFormat("E d MMM yyyy HH:mm a");

    private Context context;
    private List<Card>cards;
    private int layout;

    public CardAdapter(Context context, List<Card> cards, int layout) {
        this.context = context;
        this.cards = cards;
        this.layout = layout;
    }

    @Override
    public int getCount() {
        return cards.size();
    }

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

    @Override
    public long getItemId(int position) {
        return cards.get(position).getId();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder vh;
        if (convertView == null){
            convertView = LayoutInflater.from(context).inflate(layout, null);
            vh = new ViewHolder();
            vh.namecard = convertView.findViewById(R.id.nombrecard);
            vh.valorcard = convertView.findViewById(R.id.montocard);
            vh.fechatravel = convertView.findViewById(R.id.fecha_travel);
            vh.imgBackground = convertView.findViewById(R.id.colorcard);
            convertView.setTag(vh);
        }else{
            vh = (ViewHolder) convertView.getTag();
        }
        Card card = cards.get(position);

        vh.namecard.setText(card.getNombrecard());
        vh.valorcard.setText(String.format("%.2f", card.getMontocard()));
        String createdAt = df.format(cards.get(position).getCreatedAt());
        vh.fechatravel.setText(createdAt);
        if (card.getImgBackground() == 0) {
            vh.imgBackground.setImageResource(R.drawable.button_1);
        } else if (card.getImgBackground() == 1) {
            vh.imgBackground.setImageResource(R.drawable.button_2);
        } else if (card.getImgBackground() == 2){
            vh.imgBackground.setImageResource(R.drawable.button_3);
        } else if (card.getImgBackground() == 3){
            vh.imgBackground.setImageResource(R.drawable.button_4);
        } else if (card.getImgBackground() ==4){
            vh.imgBackground.setImageResource(R.drawable.button_5);
        }else if(card.getImgBackground() ==5){
            vh.imgBackground.setImageResource(R.drawable.button_6);
        }else if (card.getImgBackground() == 6){
            vh.imgBackground.setImageResource(R.drawable.button_7);
        }else if (card.getImgBackground() == 7){
            vh.imgBackground.setImageResource(R.drawable.button_8);
        }else if (card.getImgBackground() == 8){
            vh.imgBackground.setImageResource(R.drawable.button_9);
        }else if (card.getImgBackground() == 9){
            vh.imgBackground.setImageResource(R.drawable.button_10);
        }else  if (card.getImgBackground() == 10){
            vh.imgBackground.setImageResource(R.drawable.button_11);
        }else if (card.getImgBackground() == 11){
            vh.imgBackground.setImageResource(R.drawable.button_12);
        }

        return convertView;
    }

    public class ViewHolder{
         TextView namecard;
         TextView valorcard;
         TextView fechatravel;
         ImageView imgBackground;
    }
}

This is my activity:

  package bondi.developedsudaka.bondi.UI;

import android.animation.Animator;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import bondi.developedsudaka.bondi.Adapters.BusAdapter;
import bondi.developedsudaka.bondi.Adapters.CardAdapter;
import bondi.developedsudaka.bondi.Adapters.TicketAdapter;
import bondi.developedsudaka.bondi.Models.Bus;
import bondi.developedsudaka.bondi.Models.Card;
import bondi.developedsudaka.bondi.Models.Ticket;
import bondi.developedsudaka.bondi.R;
import io.realm.Realm;
import io.realm.RealmChangeListener;
import io.realm.RealmResults;
import io.realm.Sort;

public class MyDashboard extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener,
        RealmChangeListener<RealmResults<Card>>{

    private Realm realm;

    private ListView cardlist;
    private CardAdapter cardAdapter;
    private RealmResults<Card>cards;
    private TextView textFecha, textTiempo;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_dashboard);

        final Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        realm = Realm.getDefaultInstance();
        cards = realm.where(Card.class).sort("createdAt", Sort.DESCENDING).findAll();
        cards.addChangeListener(this);

        cardAdapter = new CardAdapter(this, cards, R.layout.template_card);
        cardlist = findViewById(R.id.cards_list);
        cardlist.setAdapter(cardAdapter);

}
    //region Region Metodo Recargar lista
    @Override
    public void onChange(RealmResults<Card> cards) {
        cardAdapter.notifyDataSetChanged();

    }
    //endregion

}

Y este el listView:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="50dp"
    tools:context="bondi.developedsudaka.bondi.UI.MyDashboard"
    tools:showIn="@layout/app_bar_my_dashboard">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/m48dp">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/cards"
                    android:textSize="@dimen/t14sp"
                    android:layout_gravity="center"
                    android:textColor="?attr/colorPrimary"
                    android:layout_marginLeft="@dimen/m16dp"/>

            </LinearLayout>

            <android.support.v7.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:cardElevation="@dimen/m10dp">

                <ListView
                    android:id="@+id/cards_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:scrollbars="vertical" />

            </android.support.v7.widget.CardView>

        </LinearLayout>
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

And this is the model:

    package bondi.developedsudaka.bondi.Models;

import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;

import java.io.Serializable;
import java.util.Date;

import bondi.developedsudaka.bondi.App.MyApplications;
import io.realm.RealmList;
import io.realm.RealmObject;
import io.realm.annotations.PrimaryKey;

/**
 * Created by ruben on 27/02/2018.
 */

public class Card extends RealmObject{

    @PrimaryKey
    private long id;
    private String nombrecard;
    private int imgBackground;
    private Double montocard;
    private Date createdAt;


    public Card() {
    }

    public Card(String nombrecard, int imgBackground, Double montocard) {
        this.id = MyApplications.CardID.incrementAndGet();
        this.nombrecard = nombrecard;
        this.imgBackground = imgBackground;
        this.montocard = montocard;
        this.createdAt = new Date();

    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNombrecard() {
        return nombrecard;
    }

    public void setNombrecard(String nombrecard) {
        this.nombrecard = nombrecard;
    }

    public int getImgBackground() {
        return imgBackground;
    }

    public void setImgBackground(int imgBackground) {
        this.imgBackground = imgBackground;
    }

    public Double getMontocard() {
        return montocard;
    }

    public void setMontocard(Double montocard) {
        this.montocard = montocard;
    }

    public Date getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }
}
    
asked by Ruben Ernesto Gomez 10.04.2018 в 18:48
source

1 answer

0

The items shown are limited by the getCount method. So if you want to show only 3 or 4 items you just have to modify that function.

int numItemsDesplegar = 3;

@Override
public int getCount() {
     if(cards.size()<numItemsDesplegar){
          return cards.size;
     }
     return numItemsDesplegar;
     //return cards.size();
}

Just keep in mind that if the num of items in cards is less than numItems Expand, an error would occur, that's why add the if

    
answered by 11.04.2018 / 22:59
source