0

JSON オブジェクトからフェッチされたアイテムを含む ListActivity があります。ユーザーが項目の 1 つをクリックすると、各項目の詳細と属性が DetailActivity クラス内に表示されます。

したがって、ListActivity から選択した項目の属性を表示する 1 つのアクティビティがあります。DetailActivity クラスには、項目を「お気に入り」としてマークするための CheckBox があります。そのため、DetailActivity 内の CheckBox がチェックされるたびに、ユーザーがその Item の DetailActivity を再度開いたときに、CheckBox の状態が常にチェックされます。

ここまでは、Boolean を SharedPreferences に渡すことで実装しました。しかし、私のメソッドは、お気に入りとしてチェックされている項目に関係なく、DetailActivity クラスの状態のみを保存します。したがって、特定のアイテムの状態は保存されず、DetailActivity クラスの状態のみが保存されます。

どうすればそうすることができますか?

これが私のスニペットです:

final CheckBox cb_fav = (CheckBox) findViewById(R.id.cb_tool_fav);
        cb_fav.setOnClickListener(this);
        boolean isChecked = getBooleanFromPreferences("isChecked");
        Log.i("start",""+isChecked);
        cb_fav.setChecked(isChecked);

        cb_fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
                Log.i("boolean",""+isChecked);
                DetailsActivity.this.putBooleanInPreferences(isChecked,"isChecked");

            }
            });

    }

     public void putBooleanInPreferences(boolean isChecked,String key){
            SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean(key, isChecked);
            editor.commit();        
        }
        public boolean getBooleanFromPreferences(String key){
            SharedPreferences sharedPreferences = this.getPreferences(Activity.MODE_PRIVATE);
            Boolean isChecked = sharedPreferences.getBoolean(key, false);
            return isChecked;       
        }

これは、ListActivity にフェッチするオブジェクト クラスです。これらは、DetailsActivity クラス内に表示される属性です。

public class VideoLocation {

    public String deleted_at = null;
    public int documentary_video_length = -1;
    public int id = -1;
    public double latitude = 0d;
    public double longitude = 0d;
    public int position = -1;
    public String updated_at = null;
    public String name = null;
    public String text = null;
    public String documentary_video_url = null;
    public String documentary_thumbnail_url = null;
    public String audio_text_url = null;
    public Footage[] footages = null;

    public VideoLocation(){

    }
4

2 に答える 2

1

もちろん、各項目のチェックボックスの状態を保存する必要があります。

属性から、「id」属性はオブジェクトごとに一意であると思います。したがって、次の方法で「id」属性によってオブジェクトの状態を保存できます。

putBooleanInPreferences(check_uncheck,String.valueOf(videoLocationObject.id));

これで、オブジェクトを表示しているときはいつでも、次の方法で状態を取得できます。

boolean check_uncheck=getBooleanFromPreferences(String.valueOf(videoLocationObject.id));

「id」属性が一意でない場合は、SharedPreferenceStorageのキーとして各行に一意の属性を選択します。

あなたのコード:

final CheckBox cb_fav = (CheckBox) findViewById(R.id.cb_tool_fav);

        boolean isChecked = getBooleanFromPreferences(String.valueOf(yourObject.id));
        Log.i("start",""+isChecked);
        cb_fav.setChecked(isChecked);
cb_fav.setOnClickListener(this);

        cb_fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
                Log.i("boolean",""+isChecked);
                putBooleanInPreferences(isChecked,String.valueOf(yourObject.id));

            }
            });

これがお役に立てば幸いです。

于 2012-05-07T11:27:23.687 に答える
0

私の理解では、uは複数のアイテムをお気に入りとして作成する必要があります。このためには、共有設定で文字列の配列を使用するか、dbを使用してリストアイテムの状態を保存する必要があります。共有優先度の配列を使用している場合は、このリンクを確認できます。

于 2012-05-07T11:27:06.453 に答える