2016-11-13 215 views
1

我正在使用浮動操作按鈕,並在其點擊時更改其圖像。我有一個標誌,我將它存儲在共享偏好中。當它是真正的圖標變成like.png時,當它是假圖標變成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); 

} 


} 

回答

0

試試這個代碼:

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); 
} 


} 
+0

但我想改變的圖標時,應用程序啓動 – Burak

+0

您可以在ReadActivity fab.setBackgroundTintList使用此代碼(ColorStateList.valueOf(彩色 .parseColor( 「#33691E」))); –

+0

我在問一個完全不同的問題 – Burak

0

我做了你的代碼的一些改進:

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); 

    flag = getRate(); 

    if(flag) 
     fab.setImageResource(R.drawable.dislike); 
    else 
     fab.setImageResource(R.drawable.like); 

    fab.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      flag = getRate(); 

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


} 

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



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

public boolean getRate(){ 
    SharedPreferences sharedPreferences = getSharedPreferences("Rates", MODE_PRIVATE); 

    boolean flag = sharedPreferences.getBoolean(id, false); 
    return flag; 
} 


} 

還要檢查你的activity_read.xml文件。如果你已經在你的xml FloatingActionButton上設置了一個圖像,它將始終使用該圖像作爲默認值。

+0

沒有任何改變,仍然是一樣的。當我開始活動時,getRate()返回它的默認值。但是,當我調用'onClick()'時,圖標發生了變化 – Burak

0

我會告訴你的邏輯。假設你有許多不同的內容,並且你想保存每個內容的評價數據。

首先,你需要你的每一個內容的評級數據存儲到某個地方(本地或遠程數據庫,SharedPreferences,文件等)

開始你ReadActivity後,

  1. 設置你的標誌爲缺省值你想成爲。
  2. 將您的FAB圖標設置爲默認值。
  3. 從您之前存儲的位置獲取您的相關內容評級數據(布爾值)。
  4. 檢查您的評分數據是真是假。
  5. 如果這是真的設置你的圖標R.drawable.dislike,否則設置R.drawable.like
  6. 當您單擊的FAB,改變你的標誌值和FAB圖標
  7. 保存新的布爾值給你存儲在哪裏之前

重要的一點是,您必須爲每個內容擁有不同的值。

編輯:

嘗試使用getSharedPreferences() 你也可以嘗試editor.apply(之前使用getApplicationContext()),而不是editor.commit();

commit()和apply()做同樣的工作,但有兩個不同,apply()異步工作commit()返回布爾值。

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

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

    flag = sharedPreferences.getBoolean(id, false); 

} 
+0

當我點擊它時,我認爲和做了與您所提及的相同的操作,並且FAB圖標發生了更改,這沒有任何問題。當我在活動開始時調用getRate()時,它會自動返回sharedPreference的默認值。 – Burak

+0

也不工作。謝謝你的幫助,我會嘗試一種不同的伎倆。 – Burak