2017-08-31 18 views
0

私はリサイクラビュー内のトグルボタンを持っています。アプリケーションの再起動のたびにトグルボタンが押されたかどうかを知るために、sharedpreferenceのブール値を保存しています。問題は です。トグルボタンと、ここでトグルボタンとリサイクルビューの間に位置する接続がないすべてのトグルボタンがオフのボタンに対して同じものに乗るのアプリケーションを閉じて私のコードは、あなたの実装が間違っているRecyclerViewのトグルボタンの位置

@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null); 

    MyHolder holder=new MyHolder(v); 
    SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE); 
    Boolean a = sharedPrefs.getBoolean("abc" , false); 
    if(a) { 
     holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light)); 
     holder.fav.setChecked(true); 
    } else { 
     holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 
     holder.fav.setChecked(false); 
    } 
    return holder; 
} 

@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 
    holder.nameTxt.setText(players[position]); 
    holder.posTxt.setText(positions[position]); 
    holder.img.setImageResource(images[position]); 
    holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked) { 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light)); 
      SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit(); 
      editor.putBoolean("abc", true); 
      editor.commit(); 
      } else { 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 
       SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit(); 
       editor.putBoolean("abc", false); 
       editor.commit(); 
      } 
     } 
    }); 
+0

[OK]を、あなたが正しいですありがとうございました。しかし、あなたの質問は何ですか? –

+0

あなたが使ったロジックが間違っています。すべてのトグルボタンにSharedPreferencesの 'abc'値を1つだけ使用しています。それが有効になったら、すべてに反映されます。 –

+0

@ josef.adamcikボタンを1つクリックしてアプリケーションを再起動すると、すべてのボタンが1つのようにトグルします – Eazyz

答えて

0

はすべて、これが正しい答え

@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null); 

    MyHolder holder=new MyHolder(v); 

    return holder; 
} 


@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 


    holder.nameTxt.setText(players[position]); 
    holder.posTxt.setText(positions[position]); 
    holder.img.setImageResource(images[position]); 
    SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE); 
    Boolean a = sharedPrefs.getBoolean("abc" + position, false); 
    if (a){ 
     holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light)); 
     holder.fav.setChecked(true); 

    }else { 
     holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 
     holder.fav.setChecked(false); 

    } 


    holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      if (isChecked){ 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light)); 
      SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit(); 
      editor.putBoolean("abc" + position, true); 
      editor.commit(); 
      } 
      else{ 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 
       SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit(); 
       editor.putBoolean("abc" + position, false); 
       editor.commit(); 

      } 
     } 
    }); 
0

です。

レイアウトを拡張するにはonCreateViewHolder()を使用する必要があります。

バインド操作はonBindViewHolder()にする必要があります。操作の切り替えを使用するonBindViewHolder()

+0

私は同じコードをonBindeView内に追加しようとしましたが、同じ結果 – Eazyz

0

私はクイック編集を行った。詳細をご確認ください。私はをSharedPreferencesに使った。したがって、各toggle button値は別のキーに保存されます。これは機能するかもしれません。それが働いた

SharedPreferences.Editor editor = c.getSharedPreferences("lol", MODE_PRIVATE).edit(); 

@Override 
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null); 

    MyHolder holder=new MyHolder(v); 

    return holder; 
} 


@Override 
public void onBindViewHolder(final MyHolder holder, final int position) { 


    holder.nameTxt.setText(players[position]); 
    holder.posTxt.setText(positions[position]); 
    holder.img.setImageResource(images[position]); 

    SharedPreferences sharedPrefs = c.getSharedPreferences("lol", MODE_PRIVATE); 
     Boolean a = sharedPrefs.getBoolean("abc"+position , false); 
     if (a){ 
      holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_light)); 
      holder.fav.setChecked(true); 

     }else { 
      holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 
      holder.fav.setChecked(false); 

     } 

    holder.fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

      if (isChecked){ 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c,R.drawable.star_light)); 

      editor.putBoolean("abc"+position, true); 
      editor.commit(); 
      } 
      else{ 
       holder.fav.setBackgroundDrawable(ContextCompat.getDrawable(c, R.drawable.star_off)); 

       editor.putBoolean("abc"+position, false); 
       editor.commit(); 

      } 
     } 
    }); 
+0

このコードは私にNullPointerExceptionを与えます – Eazyz

+1

あなたは解決策を手に入れました! –

関連する問題