java - 更改 float 操作按钮背景

标签 java android sharedpreferences floating-action-button

我正在使用 float 操作按钮,单击时其图像会发生变化。我有一个标志,并将其存储在共享首选项中。当为 true 时图标变为 like.png,当为 false 时图标变为 dislike.png。

我想根据标志变量更改其图标,但当应用程序启动时,其图标是默认的 true.png

如何通过共享首选项设置图标?

public class ReadActivity extends AppCompatActivity {

private FloatingActionButton fab;
private boolean flag;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_read);

    fab = (FloatingActionButton) findViewById(R.id.fab);

    getRate(getWindow().getDecorView().getRootView());

    if(flag==false){
        fab.setImageResource(R.drawable.like);
    }

    else if(flag==true){
       fab.setImageResource(R.drawable.dislike);
    }

    fab.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            getRate(v);

            if(flag==false) {
                rateUp();
                Snackbar.make(v, "Vote +1", Snackbar.LENGTH_LONG).show();
                saveRate(v, true);
                fab.setImageResource(R.drawable.dislike);
            }

            else if(flag==true){
                rateDown();
                Snackbar.make(v, "Vote -1", Snackbar.LENGTH_LONG).show();
                saveRate(v, false);
                fab.setImageResource(R.drawable.like);

            }
        }
    });


}

public void rateUp() {};
public void rateDown() {};



public void saveRate(View view, boolean flag){
    SharedPreferences sharedPreferences = getSharedPreferences("Rates", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(id, flag);
    editor.commit();
}

public void getRate(View view){
    SharedPreferences sharedPreferences = getSharedPreferences("Rates", MODE_PRIVATE);

    flag = sharedPreferences.getBoolean(id, false);

}


}

最佳答案

试试这个代码:

public class ReadActivity extends AppCompatActivity {

private FloatingActionButton fab;
private string getSharedPreferencesId="getSharedPreferencesId";
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_read);

    fab = (FloatingActionButton) findViewById(R.id.fab);

    boolean flag=getRate();

    if(flag==false){
        fab.setImageResource(R.drawable.like);
    }

    else if(flag==true){
       fab.setImageResource(R.drawable.dislike);
    }

    fab.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            boolean flag=getRate();

            if(flag==false) {
                rateUp();
                Snackbar.make(v, "Vote +1", Snackbar.LENGTH_LONG).show();
                saveRate(true);
                fab.setImageResource(R.drawable.dislike);
            }

            else if(flag==true){
                rateDown();
                Snackbar.make(v, "Vote -1", Snackbar.LENGTH_LONG).show();
                saveRate(false);
                fab.setImageResource(R.drawable.like);

            }
        }
    });


}

public void rateUp() {};
public void rateDown() {};



public void saveRate(boolean flag){
    SharedPreferences sharedPreferences = getSharedPreferences("Rates", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(getSharedPreferencesId, flag);
    editor.commit();
}

public boolean getRate(){
    SharedPreferences sharedPreferences = getSharedPreferences("Rates", MODE_PRIVATE);
    flag = sharedPreferences.getBoolean(getSharedPreferencesId, false);
}


}

关于java - 更改 float 操作按钮背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40571621/

相关文章:

java - 检查 2 个数组以查看它们是否具有相同的值?

java - 应用android5.1.1 Proguard 后出现VerifyError。请告诉我如何解决它

java - 在 JAVA ANDROID SDK 中动态创建按钮和文本

android - 在 ListView 中创建简单的字母滚动?

java - Android 的 SharedPreferences 在 Java 中的等价物是什么?

java - 保存多选 ListView 的状态

android - 当应用程序被强制移动到 SD 卡时,SharedPreferences 去哪里了?

java - 使用正则表达式解析日期

android - 错误 :(3, 5) 找不到与给定名称匹配的资源

java - 避免对实例相关类型和原始类型进行检查