1

Пишу RecyclerView по туториалу Сделал всё как в статье написано, все равно не запускается. Не могу понять в чём проблема. Код класса Main

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
private List<Flat> flatList = new ArrayList<>();
    private RecyclerView rv;
    RVAdapter mRVAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv = (RecyclerView)findViewById(R.id.rv);

        mRVAdapter = new RVAdapter(flatList);


       rv = (RecyclerView) findViewById(R.id.recycler_view);
       LinearLayoutManager mlm = new LinearLayoutManager(getApplicationContext());
        rv.setLayoutManager(mlm);
        rv.setItemAnimator(new DefaultItemAnimator());
        rv.setAdapter(mRVAdapter);

        prepareFlatData();
    }

    private void prepareFlatData() {
        flatList = new ArrayList<>();
        flatList.add(new Flat(R.drawable.flatcrop, "230$","Lorem ipsdsd sgfg eerw","Free from: 12.03.2017"));
        flatList.add(new Flat(R.drawable.flatcrop, "230$","Lorem ipsdsd sgfg eerw","Free from: 12.03.2017"));
        flatList.add(new Flat(R.drawable.flatcrop, "230$","Lorem ipsdsd sgfg eerw","Free from: 12.03.2017"));
        flatList.add(new Flat(R.drawable.flatcrop, "230$","Lorem ipsdsd sgfg eerw","Free from: 12.03.2017"));
        flatList.add(new Flat(R.drawable.flatcrop, "230$","Lorem ipsdsd sgfg eerw","Free from: 12.03.2017"));
    mRVAdapter.notifyDataSetChanged();}



    }

Код адаптера:

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



import java.util.List;

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.FlatViewHolder>{
    private List<Flat>flatList;
    public static class FlatViewHolder extends RecyclerView.ViewHolder {

        TextView flatPrice;
        TextView flatDescription;
        TextView ff;
        ImageView flatPhoto;

        FlatViewHolder(View itemView){
            super (itemView);
            flatPrice = (TextView)itemView.findViewById(R.id.price);
            flatDescription = (TextView)itemView.findViewById(R.id.description);
            ff = (TextView)itemView.findViewById(R.id.ff);
            flatPhoto = (ImageView)itemView.findViewById(R.id.flat_photo);
        }
    }


    RVAdapter(List<Flat>flatList){this.flatList = flatList;}



    @Override
    public FlatViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.flat_list_row, viewGroup,false);

        return new FlatViewHolder(v);
    }

    @Override
    public void onBindViewHolder(FlatViewHolder holder, int position) {
        holder.flatPhoto.setImageResource(flatList.get(position).getImageId());
        holder.flatPrice.setText(flatList.get(position).getPrice());
        holder.flatDescription.setText(flatList.get(position).getPrice());
        holder.ff.setText(flatList.get(position).getPrice());
    }

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

row.layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp"
        >
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/flat_photo"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="16dp"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/price"
            android:layout_toRightOf="@+id/flat_photo"
            android:layout_alignParentTop="true"
            android:textSize="10sp" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/description"
            android:layout_toRightOf="@id/flat_photo"
            android:layout_below="@id/price"
            android:textSize="5dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ff"
            android:layout_toRightOf="@id/flat_photo"
            android:layout_below="@id/description"
            android:textSize="5dp"/>
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:background="@drawable/favourites"/>
    </RelativeLayout>

</LinearLayout>

Recyclerview.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv"/>

</LinearLayout>
Opimand
  • 87
  • 1
  • 1
  • 9
  • что значит "не запускается"? Как здесь задавать вопросы, чтобы получить полезный ответ. – pavlofff Mar 23 '17 at 13:17
  • @pavlofff Это значит, что на экран активити пуст, на месте где должно быть RecyclerView – Opimand Mar 23 '17 at 13:37
  • корневой layout айтема (row.layout.xml) у вас высота match_parent, должна быть wrap_content, очевидно он закрывает собой весь список. Делайте дополнения, редактируя сам вопрос (кнопка "править" под вопросом), а не в комментариях к нему. – pavlofff Mar 23 '17 at 13:39
  • @pavlofff , поменял - ничего не изменилось, отредактировал в названии – Opimand Mar 23 '17 at 13:43
  • Тогда нужно дебажить, Сделайте сначала полную копию из примера, потом свой простейший список с одним TextView, потом усложняйте. Вот недавно похожий вопрос был. А зачем у вас RelativeLayout обернут в LinearLayout, слишком много гигарец на устройстве и ему необходима ненужная работа? – pavlofff Mar 23 '17 at 13:47
  • @pavlofff , сделал как вы сказали, всё получилось, у меня на элементе RecyclerView еще есть кнопка добавить в избранное, как повесить на нее Listener? И анимацию на нее сделать будет возможно ? – Opimand Mar 24 '17 at 07:57
  • как добавить слушатель/ Анимацию тоже можно сделать, как и для любого View – pavlofff Mar 25 '17 at 03:53

1 Answers1

0

Вы дважды находите ресайклер вью. Первый раз указываете свой id(rv) указанный вами в xml второй раз (recicler_view) безрассудно скопепащеный с примера.

  rv = (RecyclerView)findViewById(R.id.rv);

    mRVAdapter = new RVAdapter(flatList);


   rv = (RecyclerView) findViewById(R.id.recycler_view);