第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何管理列表中項目運行“結(jié)果活動”的狀態(tài)?

如何管理列表中項目運行“結(jié)果活動”的狀態(tài)?

Helenr 2023-04-13 10:37:05
例如,里面有一個項目列表RecyclerView。我想在單擊相應(yīng)的列表項后更改項目的圖像。如何position在 之后保留項目startActivityForResult,并將圖像路由onActivityResult回基于 的對應(yīng)項目position。對我來說只是一個選擇——保存Activity成員變量的位置,并在之后使用它onActivityResult。也許有更好的方法來避免為創(chuàng)建額外的狀態(tài)Activity?代碼示例:public class MyActivity extends AppCompatActivity {  private static final int REQ_TAKE_PICTURE = 1;  // is it possible to avoid this variable as Activity state  private int tempItemPosition;  @Override  public void onCreate(Bundle savedInstanceState) {    ...    MyAdapter adapter = new MyAdapter();    adapter.setOnItemClickListener(this::startTakePhoto);  }  @Override  public void onActivityResult(int reqCode, int resCode, Intent data) {    if(reqCode == REQ_TAKE_PICTURE) {  updateImageItem(Uri.parse(data.getStringExtra(TakePictureActivity.RESULT_IMAGE_URI)), tempItemPosition)    }  }  private void updateImageItem(Uri imageUri, int position) {    // update item image for position  }  private void startTakePhoto(int position) {    // saving state which is better to avoid    tempItemPosition = position;    Intent intent = new Intent(this, TakePhotoActivity.class);    startActivityForResult(intent, REQ_TAKE_PICTURE);  }}public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {  ...  public void setOnItemClickLsitener(OnItemClickListener listener) {    ...  }  ...  public interface OnItemClickListener {    void onItemClick(int position);  }}是否可以調(diào)用updateImageItem(Uri, int)after onActivityResult,但不將點擊的項目位置保存為Activity狀態(tài)?
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

將數(shù)據(jù)傳遞給另一個 Activity 并返回:


... your code


? @Override

? public void onActivityResult(int reqCode, int resCode, Intent data) {

? ? if(reqCode == REQ_TAKE_PICTURE) {

? ? ?String uriExtra = data.getStringExtra(TakePictureActivity.RESULT_IMAGE_URI);

? ? ?int positionExtra = data.getIntExtra("PhotoParentPosition")

updateImageItem(Uri.parse(uriExtra), positionExtra)

? ? }

? }


... your code


private void startTakePhoto(int position) {

? ? // saving state which is better to avoid

? ? tempItemPosition = position;

? ? Intent intent = new Intent(this, TakePhotoActivity.class);

? ? intent.putExtra("PhotoParentPosition", position);

? ? startActivityForResult(intent, REQ_TAKE_PICTURE);

? }

在您的其他活動 (TakePhotoActivity) 中,您從創(chuàng)建 Intent 中獲得額外的 ("PhotoParentPosition") 并將其放在結(jié)果 Intent 上。


另一種選擇是使用 AndroidX ViewModel 并在兩個活動之間使用共享的 ViewModel。

ViewModel 的想法是它是一個數(shù)據(jù)類,可以保存有關(guān)您的視圖的數(shù)據(jù)(例如選擇列表項位置),該數(shù)據(jù)可以跨活動和跨配置更改保存。

Architecture Components 為負(fù)責(zé)為 UI 準(zhǔn)備數(shù)據(jù)的 UI 控制器提供 ViewModel 輔助類。ViewModel 對象在配置更改期間自動保留,以便它們保存的數(shù)據(jù)可立即用于下一個活動或片段實例。例如,如果您需要在您的應(yīng)用程序中顯示用戶列表,請確保將獲取和保存用戶列表的責(zé)任分配給 ViewModel,而不是活動或片段,如以下示例代碼所示:


查看完整回答
反對 回復(fù) 2023-04-13
  • 1 回答
  • 0 關(guān)注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號