Simple Recycleview on Android

1

I'm trying to create a list with simple content, that is, each element is shown in a single line

    ArrayList<String> list = new ArrayList<String>();

    list.add("Simple Item1");
    list.add("Simple Item2");
    list.add("Simple Item3");
    list.add("Simple Item4");

    RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.simple_recycler_view);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mRecyclerView.setAdapter(new SimpleListAdapter(this,list));

draw_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:gravity="center_vertical"
    android:clickable="true"
    android:background="?android:attr/selectableItemBackground">


    <TextView
        android:id="@+id/text1"
        android:layout_marginLeft="16dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="Example application"
        android:textSize="16sp"
        android:layout_gravity="center_vertical"
        />

</RelativeLayout>

Where I'm stuck in creating the SimpleListAdapter Adapter I have the following that does not work, I have taken it from another project and I am adapting it to work with a simple array.

public class SimpleListAdapter<T> extends ArrayAdapter<String> {

    private final Activity context;
    private final List<String> objects;

    public static class ViewHolder {
        public TextView text1;
    }

    public SimpleListAdapter(Context context, ArrayList<String> objects) {
        super(context, 0, objects);
        this.context = (Activity) context;
        this.objects = objects;
    }

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

        //Obteniendo una instancia del inflater
        LayoutInflater inflater = (LayoutInflater)getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //Salvando la referencia del View de la fila
        View listItemView = convertView;

        //Comprobando si el View no existe
        if (null == convertView) {
            //Si no existe, entonces inflarlo con image_list_view.xml
            listItemView = inflater.inflate(
                    android.R.layout.simple_list_item_1,
                    parent,
                    false);
        }

        //Obteniendo instancias de los elementos
        TextView text1 = (TextView)listItemView.findViewById(android.R.id.text1);
        //TextView subtitulo = (TextView)listItemView.findViewById(android.R.id.text2);

        //Obteniendo instancia de la Tarea en la posición actual
        //List<String> row = getItem(position);

        //Devolver al ListView la fila creada
        return listItemView;

    }
}

The final result I want as

    
asked by Webserveis 30.03.2016 в 20:09
source

1 answer

4

The problem is your adapter, to use RecyclerView your adapter should extend from RecyclerView.Adapter<SimpleListAdapter.ViewHolder> {

as noted in the documentation .

RecyclerView.Adapter<VH extends RecyclerView.ViewHolder>

example:

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class SimpleListAdapter extends RecyclerView.Adapter<SimpleListAdapter.ViewHolder> {

    private ArrayList<String> mDataset;

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView txtHeader;

        public ViewHolder(View v) {
            super(v);
            txtHeader = (TextView) v.findViewById(R.id.text1);

        }
    }
    @Override
    public int getItemCount() {
        return mDataset.size();
    }

    public void add(int position, String item) {
        mDataset.add(position, item);
        notifyItemInserted(position);
    }

    public void remove(String item) {
        int position = mDataset.indexOf(item);
        mDataset.remove(position);
        notifyItemRemoved(position);
    }

    public SimpleListAdapter(ArrayList<String> myDataset) {
        mDataset = myDataset;
    }

    @Override
    public SimpleListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.draw_item, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        final String name = mDataset.get(position);
        holder.txtHeader.setText(mDataset.get(position));
        holder.txtHeader.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //remueve item!
                remove(name);
            }
        });

    }

}

Using the correct Adapter you can load the views without problems:

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

        ArrayList<String> list = new ArrayList<String>();

        list.add("Simple Item1");
        list.add("Simple Item2");
        list.add("Simple Item3");
        list.add("Simple Item4");

        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(new SimpleListAdapter(list));

    }

    
answered by 31.03.2016 / 08:23
source