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;
}
}