8

Với mã này, tôi có thể dễ dàng chèn động một số bố cục. Bố cục chứa Button, mà tôi muốn khởi chạy startActivityForResult. Bây giờ khi tôi nhận được kết quả (văn bản), tôi muốn đặt nó trên Button.Android nhận giá trị từ onActivityResult và đặt nó thành Nút

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

Đặt cờ trênKích hoạtResult rồi thêm chế độ xem của bạn ở chế độResume. – Qamar

Trả lời

2

Bạn không thể đặt văn bản trên ImageButton. ImageButton không có phương pháp cho việc này. Thay vào đó bạn phải sử dụng một Button, hoặc, nếu hình ảnh là quan trọng, sử dụng một ImageButton với một TextView bên dưới.

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

Và sau đó thiết lập các văn bản mà bạn lấy để TextView của bạn:

mYourTextView.setText(retrievedText); 
2

bạn rlCampi là một ViewGroup và bạn đang thêm con trong nó bằng cách sử rlCampi.addView(child). Bạn có thể tìm thấy số lượng trẻ có mặt trong số View bằng cách sử dụng rlCampi.getChildCount().

Bây giờ thay thế mã của bạn với bên dưới

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

Và khi bạn đang thiết kết quả thêm những dòng này

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

Và bên 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, nhưng phải trả lại văn bản từ RESULT_OK – user2847219

+0

Có u phải là –

+0

kết quả cài đặt của tôi nhưng không hoạt động: Intent intent = new Intent(); intent.putExtra ("btnGeneraPSW_position", tvPassword.getText(). ToString()); setResult (RESULT_OK, mục đích); kết thúc(); – user2847219

6

Làm điều này trong Hoạt động Genera_password sau khi hoàn thành tất cả các hoạt động.

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

Trong OnActivityResult của hoạt động hiện tại

@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

Điều này sẽ thất bại vì chế độ xem được tạo sau khi onActivityResult – jorgemf

1

Bạn nên đặt kết quả trong Genera_password hoạt động. Bạn có thể làm như thế này:

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

Sau đó, bạn có thể nhận được giá trị String này từ onActivityResult như thế này:

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

Chúc may mắn.

1

onActivityResult được gọi trước khi chế độ xem được tạo. Điều đó có nghĩa là bạn không thể đặt bất kỳ thứ gì thành nút vì nút chưa thoát. Như @ Qamar cho biết bạn phải lưu kết quả vào một biến và kiểm tra trong onActivityResume biến đó và đặt giá trị chính xác cho nút.

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

} 
Các vấn đề liên quan