无法在片段类表单适配器类

时间:2019-07-29 03:49:58

标签: java android android-fragments adapter

我有一个带有recycleview的片段,在其中用来自互联网的json项填充它。 它加载正常,下一步是单击任何行时打开新的活动。它可以在活动中工作,因此我为片段修改了相同的代码,但是对于片段,它在行中引发了异常

       mExampleAdapter.setOnItemClickListener(getActivity());

具有错误adatper的错误setOnItemClickListener的应用程序无法应用于Fragment活动,因此当我将行更改为

(ExampleAdapter.OnItemClickListener) 

以及当我构建和运行时。然后应用程序崩溃,并显示错误消息,即持有framgnet的Mainactivity无法投射到.ExampleAdapter $ OnItemClickListener

这是我整个Fragment课

public class Mynotes extends Fragment implements ExampleAdapter.OnItemClickListener{

    public static final String YTD_LINK = "link";
    private RecyclerView mRecyclerView;
    private ExampleAdapter mExampleAdapter;
    private ArrayList<ExampleItem> mExampleList;
    private RequestQueue mRequestQueue;
    String url="https://api.myjson.com/bins/16mecx";

    public Mynotes() {


    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.activity_jsonfeed, container, false);




        mRecyclerView = view.findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mRecyclerView.addItemDecoration(new MyDividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL, 36));

        mExampleList = new ArrayList<>();
        mExampleAdapter = new ExampleAdapter(getActivity(), mExampleList);
        mRecyclerView.setAdapter(mExampleAdapter);
        mExampleAdapter.setOnItemClickListener((ExampleAdapter.OnItemClickListener) getActivity());
 



     
        parseJSON();



        return view;
    }

  

    private void parseJSON() {

        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        myProgressBar.setVisibility(View.GONE);

                        try {
                            JSONArray jsonArray = response.getJSONArray("hits");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject hit = jsonArray.getJSONObject(i);
                                String videoTitle = hit.getString("title");
                                String link = hit.getString("link");


                                mExampleList.add(new ExampleItem(videoTitle, link));
                                mExampleAdapter.notifyDataSetChanged();
                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            
            }
        });

        mRequestQueue.add(request);
    }

    @Override
    public void onItemClick(int position) {
        Intent intent = new Intent(getActivity(), NewActiviyt.class);
        ExampleItem clickedItem = mExampleList.get(position);
            intent.putExtra(YTD_LINK, clickedItem.getmLink());
            startActivity(intent);


    }

    @Override
    public void onRefresh() {

    }
}

我的适配器类是

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {
    private Context mContext;
    private ArrayList<ExampleItem> mExampleList;
    private OnItemClickListener mListener;



    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }



    public ExampleAdapter(Context context, ArrayList<ExampleItem> exampleList) {
        mContext = context;
        mExampleList = exampleList;
    }

    @Override
    public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.example_item, parent, false);
        return new ExampleViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ExampleViewHolder holder, int position) {
        ExampleItem currentItem = mExampleList.get(position);


         String title = currentItem.getTitle();
//        int likeCount = currentItem.getLikeCount();
//        String imageUrl = currentItem.getImageUrl();

          holder.mTextViewCreator.setText(title);
//        holder.mTextViewLikes.setText("Likes: " + likeCount);
//        Glide.with(mContext).load(imageUrl).apply(RequestOptions.circleCropTransform()).into(holder.mImageView);

    }

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

    public class ExampleViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public TextView mTextViewCreator;
//        public TextView mTextViewLikes;
//        public ImageView mImageView;

        public ExampleViewHolder(View itemView) {
            super(itemView);
//            mTextViewLikes = itemView.findViewById(R.id.text_view_likes);
//            mImageView = itemView.findViewById(R.id.image_view);
            mTextViewCreator = itemView.findViewById(R.id.text_title);


        }

        @Override
        public void onClick(View view) {

            if (mListener != null) {
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    mListener.onItemClick(position);
                }
            }

        }
    }
}

谢谢。

2 个答案:

答案 0 :(得分:0)

在片段中工作时,用getContext替换getActivity

您可以在此处阅读更多内容

What is different between getContext and getActivity from Fragment in support library?

答案 1 :(得分:0)

您的活动应实现ExampleAdapter.OnItemClickListener