【发布时间】:2019-05-25 14:50:16
【问题描述】:
我想将意图从我的 SeriesVBAdapter 应用到我的 Fragment,但出现错误。我实现了接口,但找不到解决方案。我想将数据从 SeriesVBAdapter 发送到 DescriptionFragment。在这样做的过程中,我尝试了 SeriesVBAdapter 到 DescriptionActivity,然后是 DescriptionFragment,但我得到了错误。
(网站上的解决方案让我更加困惑。)
系列监听器
public interface SeriesListener {void seriesKnowledge(String title,String desc,int thumb);}
SeriesRVAdapter
public class SeriesRVAdapter extends RecyclerView.Adapter<SeriesRVAdapter.MyViewHolder> {
private Context mContext;
private List<SeriesDB> mData;
private SeriesListener mSeriesListener;
public SeriesRVAdapter(Context mContext, List<SeriesDB> mData) {
this.mContext = mContext;
this.mData = mData;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.cardview_item_categories,parent,false);
MyViewHolder holder = new MyViewHolder(view,mSeriesListener);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.seriesTitle.setText(mData.get(position).getTitle());
holder.seriesImage.setImageResource(mData.get(position).getThumbnail());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mSeriesListener.seriesKnowledge(mData.get(position).getTitle(),mData.get(position).getDescription(),mData.get(position).getThumbnail());
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder{
TextView seriesTitle;
ImageView seriesImage;
CardView cardView;
SeriesListener mSeriesListener;
public MyViewHolder(View itemView, SeriesListener seriesListener){
super(itemView);
seriesTitle = itemView.findViewById(R.id.series_title_id);
seriesImage = itemView.findViewById(R.id.series_img_id);
cardView = itemView.findViewById(R.id.cardview_series_id);
mSeriesListener = seriesListener;
}
}
}
描述活动
public class DescriptionActivity extends AppCompatActivity implements SeriesListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description);
}
@Override
public void seriesKnowledge(String title, String desc, int thumb) {
FragmentManager manager = getFragmentManager();
DecriptionFragment decriptionFragment = (DecriptionFragment) manager.findFragmentById(R.id.description_fr);
decriptionFragment.sendData(title,desc,thumb);
}
}
DecriptionFragment
public class DecriptionFragment extends Fragment {
View view;
ImageView img;
TextView tx1;
TextView tx2;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_description,container,false);
img = view.findViewById(R.id.description_image_id);
tx1 = view.findViewById(R.id.description_series_id);
tx2 = view.findViewById(R.id.description_series_category);
return view;
}
public void sendData(String title, String desc, int thumb)
{
img.setImageResource(thumb);
tx1.setText(title);
tx2.setText(desc);
}
}
类别片段
公共类 CategoriesFragment 扩展 Fragment {
View view;
List<SeriesDB> seriesDBS;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_categories, container, false);
seriesDBS = new ArrayList<>();
seriesDBS.add(new SeriesDB("Arrow", "Crime","Decription Arrow",R.drawable.arrow));
seriesDBS.add(new SeriesDB("Flash", "Crime","Decription Flash",R.drawable.flash));
seriesDBS.add(new SeriesDB("Supernatural", "Crime","Decription Supernatural",R.drawable.supernatural));
seriesDBS.add(new SeriesDB("The Originals", "Crime","Decription Originals",R.drawable.originals));
seriesDBS.add(new SeriesDB("The Legacies", "Crime","Decription Legacies",R.drawable.legacies));
seriesDBS.add(new SeriesDB("Peaky Blinders", "Crime","Decription Peaky Blinders",R.drawable.peaky));
seriesDBS.add(new SeriesDB("Arrow", "Crime","Decription Arrow",R.drawable.arrow));
seriesDBS.add(new SeriesDB("Flash", "Crime","Decription Flash",R.drawable.flash));
seriesDBS.add(new SeriesDB("Supernatural", "Crime","Decription Supernatural",R.drawable.supernatural));
seriesDBS.add(new SeriesDB("The Originals", "Crime","Decription Originals",R.drawable.originals));
seriesDBS.add(new SeriesDB("The Legacies", "Crime","Decription Legacies",R.drawable.legacies));
seriesDBS.add(new SeriesDB("Peaky Blinders", "Crime","Decription Peaky Blinders",R.drawable.peaky));
RecyclerView myrv = (RecyclerView) view.findViewById(R.id.recyclerView_series_id);
SeriesRVAdapter myAdapter = new SeriesRVAdapter(getActivity(),seriesDBS);
myrv.setLayoutManager(new GridLayoutManager(getContext(),3));
myrv.setAdapter(myAdapter);
return view;
}
}
--------- beginning of crash2018-12-02 17:44:33.663 6704-6704/com.example.forev.neizledim E/AndroidRuntime: 致命异常: main 进程:com.example.forev.neizledim,PID:6704 java.lang.NullPointerException:尝试在空对象引用上调用接口方法 'void com.example.forev.neizledim.SeriesListener.seriesKnowledge(java.lang.String, java.lang.String, int)' 在 com.example.forev.neizledim.adapter.recyclerview.SeriesRVAdapter$1.onClick(SeriesRVAdapter.java:49) 在 android.view.View.performClick(View.java:5637) 在 android.view.View$PerformClick.run(View.java:22429) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6119) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
【问题讨论】:
标签: android