8

С помощью этого кода я могу легко вставить динамически некоторые макеты. Макет содержит Button, который я хочу запустить startActivityForResult. Теперь, когда я получаю результат (текст), я хочу установить его на Button.Android получает значение от onActivityResult и устанавливает его на кнопку

btnAggiungiCampo.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     PopupMenu popup = new PopupMenu(this, btnAggiungiCampo); 
     popup.getMenuInflater().inflate(R.menu.menu_campi, popup.getMenu()); 
     popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       View child = null; 
       if (item.getTitle().equals(getString(R.string.Text))) { 
        child = getLayoutInflater().inflate(R.layout.inflate_campo, null); 
        rlCampi.addView(child); 

        Button btnGeneraPSW = (Button) child.findViewById(R.id.imageButton3); 
           btnGeneraPSW.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
             Intent inte = new Intent(this, Genera_password.class); 
             startActivityForResult(inte, REQ_CODE_ACT1); 
            } 
           }); 
       } 
      } 
     } 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQ_CODE_ACT1) { 

      // how can I set?? 

     } 
    } 
} 
+1

Установить флаг onActivityResult, а затем добавить свое мнение в onResume. – Qamar

ответ

2

Вы не можете установить текст в ImageButton. У ImageButton нет метода для этого. Вместо этого вы должны использовать кнопку, или, если изображение важно, используйте ImageButton с TextView внизу.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <ImageButton 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:scaleType="centerInside" 
     android:id="@+id/yourImageButton" 
     android:src="@drawable/yourSource" 
    /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/yourTextView" 
    /> 
</LinearLayout> 

А затем установить текст загрузки в TextView:

mYourTextView.setText(retrievedText); 
2

Ваш rlCampi является ViewGroup и вы добавляете ребенка в его использовании rlCampi.addView(child). Вы можете узнать, сколько детей присутствует в вашем View, используя rlCampi.getChildCount().

Теперь замените код ниже

ImageButton btnGeneraPSW = (ImageButton) child.findViewById(R.id.imageButton3); 
btnGeneraPSW.setTag(rlCampi.getChildCount()); 
btnGeneraPSW.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(this, Genera_password.class); 
     intent.putExtra("btnGeneraPSW_position", (int) v.getTa()); 
     startActivityForResult(intent, REQ_CODE_ACT1); 
    } 
}); 

И когда вы настраиваете результат добавления этих строк

Intent data = new Intent(); 
data.putExtra("btnGeneraPSW_position", getIntent().getIntExtra("btnGeneraPSW_position", -1)); 
setResult(Activity.RESULT_OK, data); 

А внутри onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQ_CODE_ACT1) { 
      int btnPosition = data.getIntExtra("btnGeneraPSW_position", -1); 
      if(btnPosition != -1){ 
       View childView = rlCampi.getChildAt(btnPosition); 
       // now you have your childView and activity result data 
       // using childView find your view and change its text you have from activity result data 
      } 
     } 
    } 
} 
+1

ok, но должен вернуть текст из RESULT_OK – user2847219

+0

Да u должно быть –

+0

мой результат настройки, но не работает: Intent intent = new Intent(); intent.putExtra ("btnGeneraPSW_position", tvPassword.getText(). ToString()); setResult (RESULT_OK, намерение); finish(); – user2847219

6

сделать это в Genera_password деятельности после завершения все операции.

Intent data=new Intent(); 
data.putExtra("text",requiredText); 
setResult(Activity.RESULT_OK,data); 
finish(); //to destroy Genera_password Activity 

В OnActivityResult текущей деятельности

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQ_CODE_ACT1) { 
      String requredText=data.getExtras().getString("text"); 
      button.setText(requredText); 
     } 
    } 
} 
+0

Это не удастся, потому что представление создается после onActivityResult – jorgemf

1

Вы должны установить результат в Genera_password деятельности. Вы можете сделать это, как:

Intent intent = new Intent(); 
intent.putExtra("btnGeneraPSW_position", tvPassword.getText().toString()); 
setResult(RESULT_OK, intent); 
finish(); 

Тогда вы можете получить эту String значение из onActivityResult, как это:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQ_CODE_ACT1) { 
      String tvPassword = data.getExtras().getString("btnGeneraPSW_position"); 
      ((Button) child.findViewById(R.id.imageButton3)).setText(tvPassword); 
     } 
    } 
} 

удачи.

1

onActivityResult вызывается перед созданием представления. Это означает, что вы не можете установить что-либо на кнопку, потому что кнопка еще не выходит. Поскольку @Qamar сказал, что вам нужно сохранить результат в переменной и проверить в onActivityResume эту переменную и установить правильное значение для кнопки.

Object result = null; 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == REQ_CODE_ACT1) { 
      result = data.get.... 
     } 
    } 
} 

@Override 
public void onResume() { 
    if (data != null) { 
      findViewById(id).setValue(result); 
      result = null; 
    } 

}