2

我有一个活动 A>B。在活动 A 中有 2 个按钮。button1 处于启用状态,而 button2 处于禁用状态。当您单击 button1 时,您将转到活动 B。在活动 B 中有一个按钮,当您单击时,您将返回活动 A,然后 button2 应设置为启用。问题是设置为启用状态后,它会变回禁用状态。你们能给我一个更好的方法来设置按钮启用吗?

这是我的活动 A

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

你为什么不尝试这样的事情: -

发送是否要启用或禁用按钮,如booleanActivityB 作为一部分Intent

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

在您的ActivityA 中,检查boolean从活动 B 发送的 , 。如果它为真,则启用您的 , 中的按钮onCreate(),如果,它的nullor 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

你应该使用onActivityResult(). 我看到你开始活动 b 喜欢

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

尝试:

在您B Activity单击 page1 按钮时,只需编写这些代码(只是这些):

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

您无需从类 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

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 回答
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();
      }
    });
  }
}

请注意,调用 tostartActivityForResult(...)应与被调用活动上的setResult(...)+结合使用finish(),以便正确使用此功能。您之前的代码根本不使用它,因为第二个活动会启动第一个活动的新实例。我希望这有帮助。

于 2013-02-20T08:07:37.520 回答