2017-06-01 33 views
1

私はlistViewと、list_contentというテキストビューのみを含むカスタムアダプタをフラグメントにしました。私は、ユーザーがtextView onClickの色を変更したい。これまでのところ私の関連するコードはlistView setOnItemClickedListenerと一緒に作成します。textViewのカラーをsharedPreferencesのlistViewに保存します

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

} 

私には2つの問題があります。まず、自分のアイテムをクリックすると、色が常に前後に変わることはありません。もう一つは、フラグメントの切り替え/閉じるとアプリケーションを開くときに色が保存されません。これをどうやって解決するのですか?

答えて

1

アプリを起動すると、colourValue共有のprefがロードされているように見えますが、すぐに何もしません。クリックすると、共有設定に保存された最後のcolourValueは使用されますが、アプリの起動時に作成したビューの状態は関係ありません。おそらく、このcolourValueをロードして、それをリストビューに適用する必要がありますか?各リストビュー項目の状態を保存する場合は、もう少し作業を行い、リスト全体の状態を保存する必要があります。共有設定が簡単になるかどうかは不明です。たぶん、状態オブジェクトを作成し、それをGSONにシリアル化して、それをGsonや何かを使って共有プレフィックスに保存してください。

ここではあまり進んでいないと思いますが、リストの色の状態を維持しようとする前に、これを最初に試してみてください。オンとオフの切り替えが有効であることを確認してください。

もう1つの問題は、この色の状態の値を1つ管理していることですが、リストに複数の項目を含めることができます。最初の項目を複数回クリックすると切り替えられるかもしれませんが、2番目の項目をクリックすると、最初の項目がどのような状態にあっても切り替わります(共有環境設定に保存された値を使用するためです)時間)。

また、私はあなたがSharedPreferencesを呼び出して表示されていない(コミット):https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#commit()

+0

あなたの答えはかなりそれをクリア。私はsharedPreferencesが本当にこれをしないと思う、私は他の方法を試してみます。ありがとう。 – Zeo

関連する問題