Hallo, ich bin neu in Android, habe ich Probleme beim Aufruf einer zweiten getActivty in einem zweiten Fragment. Ich habe einen ViewPager mit 2 Fragmenten, und ich möchte eine Recyclerview auf beiden aufrufen.Fehler beim Aufruf von getActivity im zweiten Fragment
Wenn ich rufe getActivity im ersten Fragment, das das recycleradapter Kontext, um es funktioniert gut
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);
Aber wenn ich es im zweiten Fragment nennen stürzt
recyclerView.setHasFixedSize(true);
layoutManager = new GridLayoutManager(getActivity(),3);
recyclerView.setLayoutManager(layoutManager);
recyclerAdapter = new LivrosAdapter(livrosArray,getActivity());
recyclerView.setAdapter(recyclerAdapter);
Und gibt diesen Fehler
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)
Jemand weiß, wie man das löst?
Dies ist der Code aus dem Adapter
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);
}
}
}
Das Problem ist mit Ihrer 'LivrosAdapter' Klasse, fügen Sie diesen Code zu Ihrer Frage hinzu. –
Wo rufen Sie die Methode getActivity() in Ihrem Fragment auf? – chaitanya
Die Protokolle zeigen das Problem mit dieser Zeile - "recyclerAdapter = new LivrosAdapter (livrosArray, getActivity());' Bitte post 'LivrosAdapter' Code –