在第二个片段中调用getActivity时出错

时间:2016-04-20 21:51:26

标签: android android-fragments android-recyclerview

您好我是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);



    }
}

}

1 个答案:

答案 0 :(得分:-1)

您可以重新启动Android模拟器并运行您的应用,然后就可以了。