有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java不能在MainActivity类之外使用SharedReferences变量

我正在编写一个简单的应用程序,它要求我记住所有动态生成的复选框状态。 我正在尝试使用SharedReferences来保存这些状态,我正在使用recyclerview,因此我在扩展活动的mainactivity中定义了我的SharedReferences和all。 很好,现在我正在尝试通过引用MainActivity.data在我的适配器类中使用它,但运气不好

主要活动相关代码:

public class MainActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    public static String FILENAME = "AnimeConfig";
    public SharedPreferences data = getSharedPreferences(FILENAME, 0);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        new GetAnime().execute();

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);
    }

    private class GetAnime extends AsyncTask<Void, Void, Void> {
        private String animeUrl = "http://www.animeseason.com/anime-list";
        public List<String> animes = new ArrayList<String>();

        @Override
        protected Void doInBackground(Void... params) {
            try {
                Document document = Jsoup.connect(animeUrl).get();
                Elements elements = document.select("div.series_alpha span");
                for (Element element : elements) {
                    animes.add(element.previousElementSibling().text());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            mAdapter = new MyAdapter(animes);
            mRecyclerView.setAdapter(mAdapter);
        }
}

MyAdapter相关代码:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private List<String> mDataset;


    public static class ViewHolder extends RecyclerView.ViewHolder {
        public CheckBox mCheckbox;

        public ViewHolder(CheckBox v) {
            super(v);
            mCheckbox = v;
        }
    }

    public MyAdapter(List<String> animes) {
        mDataset = animes;
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        CheckBox v = (CheckBox) LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, viewGroup, false);

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mCheckbox.setText(mDataset.get(position));

        holder.mCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    String animeName = buttonView.getText().toString();
                    SharedPreferences.Editor editor = MainActivity.data.edit();
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }
}

我不明白为什么我不能使用MainActivity.data


共 (1) 个答案

  1. # 1 楼答案

    您应该将SharedReferences数据声明为静态数据,以便可以从其他类访问它

    但我更喜欢使用helper类来为我完成所有这些工作

    比如:

    public class GeneralHelper {
    
        public static SharedPreferences getSharedPrefrence(Context contextversion) {
           //do the code for getting SharedPreferences    
        }
    
    }