RecyclerView给出错误

时间:2016-06-30 22:18:32

标签: android android-recyclerview recycler-adapter

嗨,我是android项目的新手,所以我正在尝试使用Recycler视图。但它不起作用。我不断收到错误@这一行“RecyclerAdapter adapter = new RecyclerAdapter(this,getData());”它说RecyclerAdapter中的RecyclerAdapter(android.content.context,List)无法应用到我的包类请帮忙

statement.java


import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;

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

import nnnnn.R;
import nnnnnn.RecyclerAdapter;
import nnnnnnnnnnnnn.Landscape;




public class Statements extends Fragment {
    Toolbar toolbar;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.statements,container,false);

        toolbar = (Toolbar) v.findViewById(R.id.toolbar);
        toolbar.setTitle("Statements");
        toolbar.inflateMenu(R.menu.menu_main);

        setUpRecyclerView();
        return v;}

    private void setUpRecyclerView() {


        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        RecyclerAdapter adapter = new RecyclerAdapter(this.getActivity(),Landscape.getData());
        recyclerView.setAdapter(adapter);

       final LinearLayoutManager mLinearLayoutManagerVertical = new LinearLayoutManager(this.getActivity()); // (Context context, int spanCount)
        mLinearLayoutManagerVertical.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(mLinearLayoutManagerVertical);

        recyclerView.setItemAnimator(new DefaultItemAnimator()); // Even if we dont use it then also our items shows default animation. #Check Docs
    }




}

RecyclerAdapter代码位于

之下
 RecyclerAdapter
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import xx.xx.xx.xx.xx.R;
import xx.xx.xx.xx.model.Landscape;


public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

    private static final String TAG = RecyclerAdapter.class.getSimpleName();

    private List<Landscape> mDataList;
    private LayoutInflater inflater;

    public RecyclerAdapter(Context context, List<Landscape> data) {
        this.mDataList = data;
        this.inflater = LayoutInflater.from(context);
    }



    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.i(TAG, "onCreateViewHolder");

        View view = inflater.inflate(R.layout.statementlist, parent, false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Log.i(TAG, "onBindViewHolder" + position);

        Landscape current = mDataList.get(position);
        holder.setData(current, position);
        holder.setListeners();
    }

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

    public void removeItem(int position) {
        mDataList.remove(position);
        notifyItemRemoved(position);
//      notifyItemRangeChanged(position, mDataList.size());
//      notifyDataSetChanged();
    }

    public void addItem(int position, Landscape landscape) {
        mDataList.add(position, landscape);
        notifyItemInserted(position);
//      notifyItemRangeChanged(position, mDataList.size());
//      notifyDataSetChanged();
    }

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView title;
        ImageView imgThumb, imgDelete, imgAdd;
        int position;
        Landscape current;

        public MyViewHolder(View itemView) {
            super(itemView);
            title       = (TextView)  itemView.findViewById(R.id.tvTitle);
            imgThumb    = (ImageView) itemView.findViewById(R.id.img_row);
            imgDelete   = (ImageView) itemView.findViewById(R.id.img_row_delete);
            imgAdd      = (ImageView) itemView.findViewById(R.id.img_row_add);
        }

        public void setData(Landscape current, int position) {
            this.title.setText(current.getTitle());
            imgThumb.setImageResource(current.getImageID());
            this.position = position;
            this.current = current;
        }

        public void setListeners() {
            imgDelete.setOnClickListener(MyViewHolder.this);
            imgAdd.setOnClickListener(MyViewHolder.this);
            imgThumb.setOnClickListener(MyViewHolder.this);
        }

        @Override
        public void onClick(View v) {
//          Log.i("onClick before operation", position + " " + mDataList.size());
            switch (v.getId()) {
                case R.id.img_row_delete:
                    removeItem(position);
                    break;

                case R.id.img_row_add:
                    addItem(position, current);
                    break;
            }
//          Log.i("onClick after operation", mDataList.size() + " \n\n" + mDataList.toString());
        }
    }
}

2 个答案:

答案 0 :(得分:2)

你正在传入&#34;这个&#34;对于RecyclerAdapter的第一个参数。 &#34;这&#34;是一个片段类。 Fragment类不会从Context扩展,因此不能这样使用。

尝试&#34; this.getActivity()&#34;。这可能会导致null,因此理想情况下将其置于Fragment子类中,并且#on; onActivityCreated&#34;方法(而不是&#34; onCreateView&#34;方法)

答案 1 :(得分:0)

您需要覆盖OnActivitycreated才能调用getActivity。在OnActivitycreated中调用setUpRecyclerView并在getActivity.之前添加findViewById并且它将起作用