根据SharedPreferences设置OnClickListeners

时间:2016-04-04 12:20:10

标签: android

我有一个视图并存储了sharedPrefs。如果您第一次单击视图,则bool值应为true。如果再次单击它并且值为true,则它应该再次为false。

以下是一些代码:

if(AppController.getInstance().getPrefManager().isItClicked(id)){
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AppController.getInstance().getPrefManager().delete(id);
                }
            });
        } else {
            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    AppController.getInstance().getPrefManager().insert(id);
                }
            });
        }

以下是我的Prefs处理的方法:

public void insertSingleQuotation(String id) {
        editPrefs.putBoolean(id, true).apply();
        editPrefs.commit();
    }




 public boolean isItClicked(String id) {
        return sharedPrefs.getBoolean(id, false);
    }

    public void deleteSingleQuotation(String id){
        editPrefs.remove(id);
        editPrefs.apply();
        editPrefs.commit();
    }

此外,如果容器是已显示的,我有一个PagerAdapter并调用isItLiked。现在,问题是容器不刷新布局和sharedPrefs,我必须滚动到任何其他视图,然后再返回到此,以便调用instantiateItem和destroyItem并刷新视图。

那我怎么解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

假设你有一个动作按钮(插入/删除),我写了下面的代码。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen);
    //initialization of views/viewpager and other stuff
    //get bool value from SharedPreferences and set it to the button/ur view
    button.setTag(AppController.getInstance().getPrefManager().isItClicked(id));
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //change true to false and vice versa
            boolean bool= !((boolean) v.getTag());
            if(bool){
                AppController.getInstance().getPrefManager().delete(id);
            }else{
                AppController.getInstance().getPrefManager().insert(id);
            }
            v.setTag(bool);
            //get the current/selected fragment instance and update the views
            //like fragment1.updateBoolean(bool);
        }
    });
    //how to update pager fragment on change of some
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            //according to position get the instance of the  fragment and update fragment views
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });