我有一个视图并存储了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并刷新视图。
那我怎么解决这个问题呢?
答案 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) {
}
});