如何在上一个活动中设置启用按钮

时间:2013-02-20 07:21:12

标签: android

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

这是我的活动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);


        }
    });

}
}

5 个答案:

答案 0 :(得分:1)

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

发送是否要启用或停用按钮,boolean来自Activity B Intent作为myIntent.putExtra("isEnabled", "enabled"); 的一部分

Activity

boolean A中,检查从活动B发送的onCreate()。如果是,则启用 null中的按钮, if,falseIntent intent=getIntent(); String isEnabled = intent.getStringExtra("isEnabled"); if(isEnabled==null||isEnabled.equals("disabled")){ page2.setEnabled(false); } else{ page2.setEnabled(true); } 禁用

Activity

无论如何,这将解决您的问题。这样,您可以启用/禁用该按钮,无论您来自哪个{{1}}。

答案 1 :(得分:0)

您无需从类p2调用Enable。你只需要调用finish()。这将返回到调用Activity,在这种情况下是Enable。 另一种方法是在从p2调用Enable时设置一个额外的方法。所以它会像:

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

并在Enabled活动的getIntent()中执行以下操作:

getIntent();
String isEnabled = intent.getStringExtra("isEnabled");
page2.setEnabled(isEnabled.equals("enabled") ? true : false) ;

答案 2 :(得分: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);
}

答案 3 :(得分: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();
      }
    });
  }
}

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

答案 4 :(得分: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);

    }