0

私はAndroid開発の初心者です。私の問題を説明させてください。メインアクティビティにチェックボックスとボタンがあります。チェックボックスをオンにして(つまり、有効にして)、その下のボタンをクリックすると、別のアクティビティに移動し、2番目のアクティビティでボタンをクリックすると、メインのアクティビティに戻ります。私の問題は、戻ってきたときにチェックボックスがチェックされていないか無効のままになっていることです。2番目のアクティビティから戻った後もその状態を維持するにはどうすればよいですか?助けてください。

XMLレイアウトのCheckBox部分は次のとおりです。

<CheckBox
    android:id="@+id/ckBxAll"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="ON" />

主な活動のスケルトンコード:

Public class TestActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View mMainView = mInflater.inflate(R.layout.main, null);        
setContentView(mMainView);
 Enable_chkbox = (CheckBox)mMainView.findViewById(R.id.ckBxAll);
if(b_onResume==true)
    {
      Enable_chkbox.setChecked(b_onResume);
   }
Enable_chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub




//do something



        });//Enable_chkbox
Compose_btn=(Button)findViewById(R.id.btnCompose);
        Compose_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent gotoComposeMessage=new Intent(TestActivity.this,ComposeMessage.class);
                startActivity(gotoComposeMessage);
            }
        });
}
@Override
    protected void onResume() {
      super.onResume();
     b_onResume=  Enable_chkbox.isChecked();

    }
   @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(myreceiver);
        this.finish();
      }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            moveTaskToBack(true);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
       super.onSaveInstanceState(savedInstanceState);
       savedInstanceState.putBoolean("Enable_chkbox",true);       

    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        boolean myBoolean = savedInstanceState.getBoolean("Enable_chkbox");
    }  

}

私の2番目の活動:

public class ComposeMessage extends Activity{
    Button SaveSMS_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.composemessage);
        SaveSMS_btn=(Button)findViewById(R.id.btnSave);
        SaveSMS_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent gotoHome=new Intent(getApplicationContext(),BlockTestActivity.class);
                Bundle BundleToCarryMessage = new Bundle();
                EditText EnterSMS_edt=(EditText)findViewById(R.id.edtEnterSMS);
                BundleToCarryMessage.putString("Message", EnterSMS_edt.getText().toString());
                gotoHome.putExtras(BundleToCarryMessage);
                startActivity(gotoHome);
            }
        });

    }

}

2番目のアクティビティで使用されるXMLファイル:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/edtEnterSMS"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save" />

</LinearLayout>
4

3 に答える 3

5

別の方法があります。onSaveInstanceState(Bundle savedInstanceState)をオーバーライドし、変更するアプリケーション状態の値を次のようにBundleパラメーターに書き込む必要があります。

次のコードは、2番目のアクティビティに移動する前に、チェックボックスの状態を保存するためのものです。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {

  savedInstanceState.putBoolean("MyCheckBox", enable);

  super.onSaveInstanceState(savedInstanceState);
}

そして、これはチェックボックスの状態を復元するときです。

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);

  boolean myBoolean = savedInstanceState.getBoolean("MyCheckBox");

}

編集:

public class TestActivity extends Activity implements OnCheckedChangeListener, OnClickListener  {

        private CheckBox Enable_chkbox;
        private View mMainView;
        private Button Compose_btn;
        private boolean myBoolean = false;;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
            mMainView = mInflater.inflate(R.layout.main, null);        
            setContentView(mMainView);
            initView();
        }

        private void initView(){

             Enable_chkbox = (CheckBox)mMainView.findViewById(R.id.ckBxAll);
             Enable_chkbox.setOnCheckedChangeListener(this);
             Compose_btn=(Button)mMainView.findViewById(R.id.btnCompose);
             Compose_btn.setOnClickListener(this);
        }

        @Override
        protected void onResume() {
          super.onResume();
          Enable_chkbox.setChecked(myBoolean);

        }

        @Override
        public void onSaveInstanceState(Bundle savedInstanceState) {
           super.onSaveInstanceState(savedInstanceState);
           savedInstanceState.putBoolean("Enable_chkbox", Enable_chkbox.isChecked());      
        }

        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            myBoolean = savedInstanceState.getBoolean("Enable_chkbox");
        }

        @Override
        public void onClick(View arg0) {
            //do something
        }

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //do something
        }  
}

'

それが役に立てば幸い。

于 2012-05-16T07:07:28.287 に答える
2

すべての一般的な目的のために、アクティビティを終了するときにチェックボックスとラジオボタンの状態を保存し、アクティビティに戻ったときにそれらを復元する必要があります。
これを行うには、通常、共有設定を使用します。メソッド内のボタンの状態を保存し、onPause()メソッド内の状態を復元しonResume()ます。
共有設定を使用するには、次のようにします。

SharedPreferences prefs = this.getSharedPreferences(
      "com.example.app", Context.MODE_PRIVATE);

設定を読むには:

String dateTimeKey = "com.example.app.datetime";

// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 

設定を編集して保存するには

Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).commit();

このブログで他の例を参照してください。
上記のコードを正しいメソッド(onPauseおよびonResume)に配置すると、ボタンの状態を復元できます。

于 2012-05-16T06:56:21.940 に答える
0

startActivityforResultを使用して2番目のアクティビティに切り替えます。これを使用して切り替えると、現在のアクティビティが終了しないため、アクティビティの状態が保存されます。

于 2012-05-16T06:49:52.270 に答える