2017-06-01 73 views
1

我有listView和片段中的自定義適配器,其中只包含一個名爲list_content的textView。我希望用戶改變textView onClick的顏色。到目前爲止,這是我的相關代碼onCreate與listView setOnItemClickedListener一起:使用sharedPreferences在listView中保存textView顏色

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    //Inflate 
    View view = inflater.inflate(R.layout.fragment_grocery_list, container, false); 

    //Load text color 
    color = getContext().getSharedPreferences("com.android.me", MODE_PRIVATE); 
    colourValue = color.getString("colourValue", null); 

    //list view 
    listView = (ListView) view.findViewById(R.id.groceryListView); 


    //arrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, groceries); 
    arrayAdapter = new customAdapter(getContext(), groceries); 
    listView.setAdapter(arrayAdapter); 

    //list view click listener 
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      list_content = (TextView) view.findViewById(R.id.list_content); 

      color = getContext().getSharedPreferences("com.android.me", MODE_PRIVATE); 
      colourValue = color.getString("colourValue", null); 

      if (list_content.getCurrentTextColor() == Color.parseColor("#000000")){ //Check if item is checked or not | if (list_content.getCurrentTextColor() == Color.parseColor("#000000")) { 

       color.edit().putString("colourValue","#a7a7a7").apply(); 

      } else { 

       color.edit().putString("colourValue","#000000").apply(); 

      } 

      list_content.setTextColor(Color.parseColor(colourValue)); 

     } 
    }); 

    return view; 

} 

我有兩個問題。首先,當我點擊我的物品時,顏色不會總是來回變化。第二,當我切換片段/關閉並打開應用程序時,顏色不會保存。我該如何解決?

回答

1

所以,當你啓動應用程序似乎加載colourValue共享pref,但它不會立即做任何事情。它看起來像點擊時,它會使用共享偏好設置中保存的最後一個colourValue,但與您在應用啓動時創建的視圖狀態無關。也許你需要加載這個colourValue並在開始時將它應用到列表視圖中?如果你想保存每個列表視圖項的狀態,你需要做更多的工作並保存整個列表的狀態。不知道共享首選項是否容易。也許創建一個狀態對象並將其序列化成GSON並使用Gson或其他東西將它存儲到共享的pref中。

我認爲這裏有一點點太多了,你可能想在嘗試保持列表的顏色狀態之前先試着讓它工作。確保打開和關閉工作。

我想這裏的另一個問題是,您正在爲這種顏色狀態管理一個值,但是您的列表中可能有多個項目。如果我點擊第一個項目很多次,它可能會切換,但如果我點擊第二個項目,它會根據第一個項目所處的狀態進行切換(因爲它使用共享首選項中保存的值時間)。

另外,我沒有看到你調用SharedPreferences提交():https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit()

+0

你的答案清除它頗有幾分。我猜sharedPreferences不會真的做到這一點,我會嘗試其他方法。謝謝。 – Zeo