2

私は活動A> Bを持っています。アクティビティ A には 2 つのボタンがあります。button1 は有効な状態で、button2 は無効な状態です。button1 をクリックすると、アクティビティ B に移動します。アクティビティ B には、クリックするとアクティビティ A に戻るボタンがあり、button2 を有効に設定する必要があります。問題は、有効な状態に設定された後、無効に戻ることです。ボタンを有効に設定するより良い方法を教えてください。

ここに私の活動があります

public class Enable extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enable);


    Button page1 = (Button) findViewById(R.id.button1);
    page1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            Intent myIntent = new Intent(view.getContext(), p2.class);
            startActivityForResult(myIntent, 0);

        }
    });

    Button page2 = (Button) findViewById(R.id.button2);
    page2.setEnabled(false);
    page1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            Intent myIntent = new Intent(view.getContext(), p2.class);
            startActivityForResult(myIntent, 0);

        }
    });
}

これが私のアクティビティBです

public class p2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.p2);

    Button page1 = (Button) findViewById(R.id.button3);
    page1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {

            Intent myIntent = new Intent(view.getContext(), Enable.class);

            setContentView(R.layout.activity_enable);
            Button a = (Button) findViewById(R.id.button2);
            a.setEnabled(true);
            startActivityForResult(myIntent, 0);


        }
    });

}
}
4

5 に答える 5

1

このようなことを試してみませんか:-

の一部として Bからのように、ボタンを有効にするか無効にするかを送信します。booleanActivityIntent

myIntent.putExtra("isEnabled", "enabled");

ActivityA で、アクティビティ B から送信された を確認しますboolean。それが true の場合は、 のボタンを有効onCreate()にし、nullまたはfalseの場合は無効にします。

Intent intent=getIntent();
String isEnabled = intent.getStringExtra("isEnabled");
if(isEnabled==null||isEnabled.equals("disabled")){
        page2.setEnabled(false);
}
else{
        page2.setEnabled(true);
}

いずれにせよ、これはあなたの問題を解決します。そうすれば、どのボタンからActivity来たかに関係なく、そのボタンを有効/無効にすることができます。

于 2013-02-20T07:27:05.870 に答える
0

コードは次のようになります。

public class ActivityA extends Activity {

  public final static int SHOW_ACTIVITY_B = 10;
  public final static String RESULT_ENABLE_BTN2 = "enable_btn2";

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enable);


    Button btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
         Intent myIntent = new Intent(view.getContext(), ActivityB.class);
         startActivityForResult(myIntent, SHOW_ACTIVITY_B);
       }
    });

    Button btn2 = (Button) findViewById(R.id.button2);
    btn2.setEnabled(false);
    btn2.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
         // Do whatever you need with button #2
         // ...
      }
    });

    @Override
    protected void onActivityResult (int requestCode, int resultCode, Intent data) {
      if( resultCode == Activity.RESULT_CANCELED ) {
        // in this case ActivityB returned this code explicitly,
        // or any result at all, or even crashed
      }
      else if( requestCode == SHOW_ACTIVITY_B ) {
        btn2.setEnabled( data.getBooleanExtra( RESULT_ENABLE_BTN2, false ) );
      }
    }
}

次のようになりActivityBます。

public class ActivityB extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.p2);


    Button btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        Intent output = getIntent();
        output.putExtra( ActivityA.RESULT_ENABLE_BTN2, true );
        setResult(RESULT_OK, output);
        finish();
      }
    });
  }
}

この機能を適切に使用するには、呼び出されたアクティビティで+と組み合わせてtoの呼び出しをstartActivityForResult(...)使用する必要があることに注意してください。2番目のアクティビティは、代わりに最初のアクティビティの新しいインスタンスを起動するため、以前のコードはまったく使用していません。これがお役に立てば幸いです。setResult(...)finish()

于 2013-02-20T08:07:37.520 に答える
0

クラスp2からEnableを呼び出す必要はありません。finish()を呼び出すだけです。これにより、呼び出し元のアクティビティ(この場合は有効)に戻ります。別の方法は、p2からEnableを呼び出すときに追加を設定することです。だからそれは次のようになります:

myIntent.putExtra("isEnabled", "enabled");

EnabledアクティビティのgetIntent()で、次のようにします。

getIntent();
String isEnabled = intent.getStringExtra("isEnabled");
page2.setEnabled(isEnabled.equals("enabled") ? true : false) ;
于 2013-02-20T07:28:10.437 に答える
0

を使用する必要がありますonActivityResult()。私はあなたが活動を始めているのを見ますbのように

Intent myIntent = new Intent(view.getContext(), p2.class);
startActivityForResult(myIntent, 0);

試す:

page1ボタンがクリックされB Activityたときに、これらのコードを記述します(これらのみ):

setResult(0,null);
finish();

次に、A Activityこれらのコードを使用する際に、まずButton page2 Button page1グローバルにします。それから

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == 0)
           page2.setEnabled(true);

    }
于 2013-02-20T08:22:05.917 に答える
0

In B アクティビティ

Button page1 = (Button) findViewById(R.id.button3);
page1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        Intent myIntent = new Intent(B.this, A.class);
        myIntent.putExtra("Button", "enabled"); 
        startActivity(myIntent);
    }
});

}

活動中

Intent intent=getIntent();
String enable = intent.getStringExtra("Button");
if(enable.equals("enabled")){
page2.setEnabled(true);
}
else{
page2.setEnabled(false);
}
于 2013-02-20T07:34:41.090 に答える