android - 无法解析 recyclerView.adapter 中的 getActivity()

标签 android android-fragments transactions

有点卡住了。我尝试将 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();


        }
    });
   }

最佳答案

Cannot resolve getActivity() in fragment

您的 Java 类声明如下:

public class CategoryAdapter extends RecyclerView.Adapter<ViewHolder>

CategoryAdapter 不是 fragment 。 CategoryAdapter 是一个 RecyclerView.Adapter

RecyclerView.Adapter没有 getActivity() 方法。因此,您的代码将无法编译。

您似乎想在 RecyclerView.Adapter 中执行一个 FragmentTransaction。但是,为了能够调用 getSupportFragmentManager(),您需要托管 RecyclerViewFragmentActivity,您的 CategoryAdapter

但是,RecyclerView.Adapter 无法直接或间接访问该 FragmentActivity。因此,您需要将 FragmentActivity 放入 CategoryAdapter 中。

您当前的构造函数声明为:

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

我的猜测是,在您的 Activity 中,您正在调用 new CategoryAdapter(this, someListOfcategories)。如果是这样,请将您的构造函数更改为:

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

并将您的字段更改为 FragmentActivity。然后,您可以更改:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();

到:

FragmentManager fragmentManager = c.getSupportFragmentManager();

关于android - 无法解析 recyclerView.adapter 中的 getActivity(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775504/

相关文章:

transactions - 为什么 Spring 集成和批处理事务的每个方法( Spring 批处理作业)的默认隔离级别设置为 SERIALIZABLE?

java - 刚刚构建了一个Android应用程序,需要开发服务器端。我从哪里开始呢?什么语言/软件?

android - 新的 SDK 中没有请求publish_actions

Android 通知未显示

java - 我如何从 Activity 中打开 android.support.v4.app.Fragment

php - Zend DB 原子事务

android - 使用 AlarmManager 每 20 秒运行一次 Android 服务不会在从应用程序列表中终止该应用程序时重新启动

java - 在 Fragment 中设置 onClickListener 时出现 NullPointerException

安卓 | TextView.setText() 不起作用

sql-server - 为什么 SQL Server 默认 XACT_ABORT 为 OFF?可以全局设置为ON吗?