2015-07-28 2 views
0

Я пишу приложение для Android, и у меня возникают трудности с изменением фона кнопок. У меня есть четыре действия, Activity1 - TableLayout, где у меня есть три кнопки. Каждая кнопка открывает другое действие. Я хочу изменить Button в Activity1 из Activity2. Поэтому я попытался сделать это с передачей результата. В деятельности2 я поставил результат:Передача результата другому Упражнение

@Override 
public void onClick(View v) { 
     setResult(Activity1.RESULT_OK); 
     finish(); 
    } 
} 

В Activity1 У меня есть этот код:

  protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
      if (resultCode == RESULT_OK) 
      button1.setBackgroundResource(R.drawable.image);  
      } 

Таким образом, когда пользователь нажимает кнопку в деятельности2 затем в Activity1 кнопку изменения фона. Моя проблема в том, что я могу сделать это только один раз, и я должен сделать это еще два раза в других действиях. Я попытался сделать RESULT_OK2, но он показывает мне ошибку. Так как я могу это делать больше раз? Я попытался изменить фон по-другому. В Activity2 я использовал кнопку 1, которая находится в Activity1, но затем я получил NullPointerExeption. Если у кого-то есть идея, как это ответить!

+0

Что вы имеете в виду ** я могу это сделать только один раз, и я должен сделать это еще два раза ** –

+0

Мне нужно изменить другие кнопки в Acivity1. Из Activity2 я хочу изменить фон Button1 в Activity1.Из Activity3 я хочу изменить фон Button2 в Activity1. Поэтому, когда я посылаю RESULT_OK из Activity2 в Activity1, я не могу повторно отправить RESULT_OK из Activity3. –

+0

используйте код запроса – njzk2

ответ

1

Вы можете сравнить requestCode тоже (это код запроса вы прошли на startActivityForResult)

Это избежать RESULT_OK интерпретируется на каждый результат деятельности.

0

Я пытался сделать RESULT_OK2

Там нет Activity постоянной для RESULT_OK2 так вот почему вы получите ошибку

Вы можете передать обратно Intent Extras. Что-то вроде

@Override 
public void onClick(View v) { 
    // add the intent info 
    Intent i = new Intent(); // make sure to use empty constructor 
    i.putExtra("image", someVar); // might want activity const for key and someVar can be String, int, or whatever you want to use 
    setResult(Activity1.RESULT_OK, i); 
    finish(); 
} 
} 

затем проверьте, что вар в вашем onActivityResult() в data паров и установить изображение соответствующим образом.

Going back to previous activity

+0

Спасибо за ваш ответ! Это почти хорошо, но у меня небольшая проблема. Когда я использую финиш(); после setResult my Activity вернитесь к Activity1 в тот момент, когда я нажимаю кнопку. Но когда я не использую финиш(); фон не изменяется. Я положил return after finish(); но ничего не произошло. Не могли бы вы мне помочь, пожалуйста? –

+0

Наверное, я в замешательстве. Я думал, ты хочешь вернуться к Activity1? – codeMagic

+0

Извините, я не ясно объяснил свою проблему. Я хочу вернуться, но только с подкладкой. У меня есть другие вещи, которые нужно сделать в Activity2, и я не хочу автоматически возвращаться, только когда пользователь щелкает мышью. –

0
when you start the activity for result in android you have to pass request code and based on that request code you can make the conditions in the onActivityResultMethod. 

**Button 1** 
Intent i = new Intent(this, yourclass1); 
startActivityForResult(i, 1); 

**in yourclass1** 
setResult(RESULT_OK); 
finish(); 

**Button 2** 
Intent i = new Intent(this, yourclass2); 
startActivityForResult(i, 2); 

**in yourclass2** 
setResult(RESULT_OK); 
finish(); 

**Button 3** 
Intent i = new Intent(this, yourclass3); 
startActivityForResult(i, 3); 

**in yourclass3** 
setResult(RESULT_OK); 
finish(); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1 && resultCode == RESULT_OK) { 
     // change background of button 1 
    }else if (requestCode == 2 && resultCode == RESULT_OK) { 
     // change background of button 2 
    }else if (requestCode == 3 && resultCode == RESULT_OK) { 
     // change background of button 3 
    } 
} 
+0

Спасибо за ваш ответ! Это почти хорошо, но у меня небольшая проблема. Когда я использую финиш(); после setResult my Activity вернитесь к Activity1 в тот момент, когда я нажимаю кнопку. Но когда я не использую финиш(); фон не изменяется. Не могли бы вы помочь? –

+0

, когда вы вызываете закончить() текущая активность на переднем плане завершена, и она передала результат активности вызова после завершения(). Если у вас есть какие-либо вопросы или вопросы, пожалуйста, дайте мне знать. –

0

Вы можете сохранить значение в SharedPreference и на основе значения в SharedPreference, вы можете изменить цвет фона button1.

В деятельности 2

@Override 
public void onClick(View v) { 
    SharedPreferences.Editor editor = getSharedPreferences("RESULTS", MODE_PRIVATE).edit(); 
    editor.putInt("BUTTON1_bg", 1); 
    editor.commit(); 
    finish(); 
} 

В деятельности 1

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     SharedPreferences prefs = getSharedPreferences("RESULTS", MODE_PRIVATE); 
     int bg = prefs.getInt("BUTTON1_bg"); 
     // based on value of bg, you can decide what background to use for button1 
    } 
0

Вы должны начать все три активности с другим кодом запроса. Или получить данные о намерениях для различения. Вы можете сделать что-то вроде С Activity1 начать все занятие с requestCode, как

startActivityForResult(<intent>,<an requestCode>); 

Тогда вы можете фильтровать тот же requestCode в onActivityResult(), как

if(requestCode==11){ 
    button1.setBackgroundResource(R.drawable.image); 
}else if(requestCode==22){ 
    button2.setBackgroundResource(R.drawable.image); 
}else if(requestCode==33){ 
    button3.setBackgroundResource(R.drawable.image); 
} 
Смежные вопросы