您好我是android的新手,我在第二个片段中调用第二个getActivty时有问题。 我有一个包含2个片段的viewPager,我想在两者上调用recyclelerview。
当我在第一个片段中调用getActivity来获取recycleradapter上下文时,它工作正常
recyclerView = (RecyclerView) view.findViewById(R.id.em_alta_recycler_view);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,false);
recyclerAdapter = new EmAltaRecyclerAdapter(altaListaArray,getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(recyclerAdapter);
但是当我在第二个片段中调用它时会崩溃
recyclerView.setHasFixedSize(true);
layoutManager = new GridLayoutManager(getActivity(),3);
recyclerView.setLayoutManager(layoutManager);
recyclerAdapter = new LivrosAdapter(livrosArray,getActivity());
recyclerView.setAdapter(recyclerAdapter);
并提供此错误
04-20 17:44:17.804 24791-24791/com.nkallianz.smocci E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nkallianz.smocci, PID: 24791
java.lang.NoSuchMethodError: No direct method <init>(Ljava/util/ArrayList;Landroid/content/Context;)V in class Lcom/nkallianz/smocci/adapters/LivrosAdapter; or its super classes (declaration of 'com.nkallianz.smocci.adapters.LivrosAdapter' appears in /data/data/com.nkallianz.smocci/files/instant-run/dex/slice-slice_1-classes.dex)
at com.nkallianz.smocci.fragments.ListasFragment.onCreateView(ListasFragment.java:65)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:164)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:608)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:570)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:551)
at com.nkallianz.smocci.tabs.SlidingTabLayout$TabClickListener.onClick(SlidingTabLayout.java:303)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
有人知道如何解决这个问题吗?
这是适配器的代码
public class LivrosAdapter extends RecyclerView.Adapter<LivrosAdapter.LivrosViewHolder>{
Context ctx;
private ArrayList<Livros> livrosArray = new ArrayList<Livros>();
public LivrosAdapter(ArrayList<Livros> livrosArray, Context ctx) {
this.livrosArray = livrosArray;
this.ctx = ctx;
}
public void setLivros(ArrayList<Livros> altaListaArray){
this.livrosArray=altaListaArray;
notifyItemChanged(0, altaListaArray.size());
}
@Override
public LivrosViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_grid_menu,parent,false);
LivrosViewHolder livrosViewHolder = new LivrosViewHolder(view,ctx,livrosArray);
return livrosViewHolder;
}
@Override
public void onBindViewHolder(LivrosViewHolder holder, int position) {
Livros livros = livrosArray.get(position);
Picasso.with(holder.capa.getContext()).load(livros.getCapa()).into(holder.capa);
}
@Override
public int getItemCount() {
return livrosArray.size();
}
public static class LivrosViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private ImageView capa;
private ArrayList<Livros> livrosArray = new ArrayList<Livros>();
Context ctx;
public LivrosViewHolder(View itemView,Context ctx,ArrayList<Livros> livrosArray) {
super(itemView);
this.ctx = ctx;
this.livrosArray = livrosArray;
capa = (ImageView) itemView.findViewById(R.id.grid_row_pic);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Livros livros = this.livrosArray.get(position);
Intent intent = new Intent(this.ctx, ObraDetalhesActivity.class);
intent.putExtra("id",livros.getId());
this.ctx.startActivity(intent);
}
}
}
答案 0 :(得分:-1)
您可以重新启动Android模拟器并运行您的应用,然后就可以了。