簡體   English   中英

無法在recyclerView.adapter中解析getActivity()

[英]Cannot resolve getActivity() in recyclerView.adapter

卡住了一點點。 我嘗試將getActivity更改為'c'(上下文),但getSupportFragmentManager獲得相同的錯誤。 閱讀不同的主題,但找不到解決方案。 檢查過庫並嘗試更改它們但沒有。 非常感謝一些幫助!

 import android.app.Activity;
 import android.content.Context;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.Fragment;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Toast;

 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.example.mrti.menu.Fragments.MealsListFragment;
 import com.example.mrti.menu.R;
 import java.util.ArrayList;


 public class CategoryAdapter extends RecyclerView.Adapter<ViewHolder> {

Context c;
ArrayList<Category> Categories;

public CategoryAdapter(Context c, ArrayList<Category> Categories) {
    this.c = c;
    this.Categories = Categories;
}
// INITIALIZE HOLDER
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.rec_item, null);
    ViewHolder holder = new ViewHolder(v);
    return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {

    // BIND DATA TO VIEWS

    holder.mNameTextView.setText(Categories.get(position).getName());

    // LOAD IMAGES FROM WEB AND CACHE THEM

    Glide.with(c)
            .load(Categories.get(position).getImage())
            .diskCacheStrategy(DiskCacheStrategy.ALL) // Saves the media item after all transformations to cache and
                                                     // Saves just the original data to cache.
            .placeholder(R.mipmap.ic_launcher)
            .into(holder.img);

    // LISTENER

    holder.setItemClickListener(new itemClickListener() {
        @Override
        public void onItemClick(View v, int pos) {
            Toast.makeText(c, Categories.get(pos).getName(), Toast.LENGTH_SHORT ).show();

            MealsListFragment fragment = new MealsListFragment();
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.root_layout, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();


        }
    });
   }

無法解析片段中的getActivity()

您的Java類聲明如下:

public class CategoryAdapter extends RecyclerView.Adapter<ViewHolder>

CategoryAdapter不是片段。 CategoryAdapterRecyclerView.Adapter

RecyclerView.Adapter沒有getActivity()方法。 因此,您的代碼將無法編譯。

您似乎想要在RecyclerView.Adapter執行FragmentTransaction 但是,為了能夠調用getSupportFragmentManager() ,您需要托管與CategoryAdapter相連的RecyclerViewFragmentActivity

但是, RecyclerView.Adapter沒有對FragmentActivity直接或間接訪問權限。 因此,您需要將FragmentActivity放入CategoryAdapter

您當前的構造函數聲明為:

public CategoryAdapter(Context c, ArrayList<Category> Categories)

我的猜測是,在你的活動中,你正在調用new CategoryAdapter(this, someListOfcategories) 如果是這樣,請將構造函數更改為:

public CategoryAdapter(FragmentActivity c, ArrayList<Category> Categories)

並將您的字段更改為FragmentActivity 然后,您可以更改:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();

至:

FragmentManager fragmentManager = c.getSupportFragmentManager();

Context沒有getActivity方法,只有Fragment才有。

所以,如果你想以這種方式使用它,你需要從Context c;改變你的字段Context c; 進入Fragment c; ,然后在onItemClick調用c.getActivity().getSupportFragmentManager()

或者,將您的字段更改為Activity c; ,然后調用c.getSupportFragmentManager()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM