2013-02-20 2 views
1

У меня есть деятельность A> B. в действии A есть 2 кнопки. button1 находится в разрешенном состоянии, а кнопка2 отключена. когда вы нажмете кнопку 1, вы перейдете к операции B. в действии B появится кнопка, которая, когда вы нажмете, вернется к действию A, а затем кнопка 2 должна быть включена. проблема в том, что после того, как она была настроена на включенное состояние, она вернется к отключенному. Можете ли вы, ребята, дать мне лучший способ включить кнопку?Как установить активировать кнопку на предыдущем мероприятии

вот моя активность

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); 


     } 
    }); 

} 
} 

ответ

1

Почему не ваша попытка что-то вроде этого: -

Отправить хотите ли вы включить или отключить кнопку, как boolean от Activity B в составе Intent

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

В вашем Activity А, проверьте boolean, посланный от деятельности В. Если это правда, то включить кнопку в вашем 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.

+0

Thanks man it works! – Jerome

+0

Всегда рады помочь! – SudoRahul

+0

Знаете ли вы, что кнопка постоянно включена? так что после его установкиEnabled он должен быть включен, даже если пользователь выходит из приложения с помощью onbackpress – Jerome

0

Вам не нужно звонить в класс класса p2. Вам просто нужно называть финиш(). Это вернется к вызывающей активности, которая в этом случае включена. Альтернативный способ сделать это - установить дополнительный параметр, когда вы вызываете Enable from p2. Так что было бы, как:

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

и в getIntent() включеного деятельности вы могли бы сделать что-то вроде:

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

это то, что я сделал спасибо за помощь – Jerome

+0

, но теперь моя проблема в том, как я могу установить ее на постоянной основе? так что даже когда пользователь выйдет из приложения, он все равно будет включен? моя цель - создать игру с определенными уровнями. и я хочу сделать это, когда пользователь закончит определенный уровень, кнопка следующего уровня включится (в которой я уже сделал) и настроил ее навсегда. – Jerome

+0

Вы можете установить это: android: alwaysRetainTaskState = «True» в файле манифеста – lokoko

0

В Б активность

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); 
} 
+0

Я пробовал это в своей активности Enabled 'Button page2 = (Button) findViewById (R.id.button2); \t \t \t \t Цель намерения = getIntent(); \t \t String enable = intent.getStringExtra ("Button"); \t \t if (enable.equals ("enabled")) { \t \t страница2.setEnabled (true); \t \t} \t \t еще { \t \t page2.setEnabled (ложь); \t \t} \t \t \t \t page2.setOnClickListener (новый View.OnClickListener() { \t \t \t общественного недействительными OnClick (View Вид) { \t \t \t \t \t \t \t \t Намерение myIntent = новый Intent (вид .getContext(), p2.class); \t \t \t \t startActivityForResult (myIntent, 0); \t \t \t \t \t \t \t} \t \t}); 'но им, имеющие нулевую ошибку указателя на LogCat на линии', если (включить.equals ("enabled")) {' – Jerome

+0

спасибо, что это тоже работает для меня – Jerome

+0

прекрасный чувак рад помочь вам :) –

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() на вызываемом чтобы использовать эту функцию должным образом. Ваш предыдущий код вы его вообще не используете, потому что второе действие запускает новый экземпляр первого действия. Надеюсь, это поможет.

+0

спасибо @mr_archano – Jerome

+0

@Jerome приветствую вас. Если это было полезно, пожалуйста, обратите внимание на мой ответ как принятый. –

0

вы должны использовать onActivityResult(). я вижу, что и начать деятельность б как

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

попробовать: в вашем B Activity

при нажатии кнопки стр.1 щелкнула, просто написать этот код (только эти):

setResult(0,null); 
finish(); 

затем в вашем A Activity использования этот код, сначала сделайте свой Button page2Button page1 глобальным. затем

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

    }