【发布时间】:2023-01-04 15:19:30
【问题描述】:
我想从活动中获得结果,我尝试遵循示例代码, 但 startActivityForResult() 已被弃用,
我试过了,但我不知道如何更改 requestCode
ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == RESULT_OK) {
aMemo[requestCode] = it.getStringExtra("memo");
aa.notifyDataSetChanged();
}
}
});
这是我所有的旧代码(包括弃用的方法)
public class MainActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
String[] aMemo = {
"1. Touch to Edit MEMO",
"2.","3.","4.","5.","6." };
ListView lv;
ArrayAdapter<String> aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.listView);
aa = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, aMemo);
lv.setAdapter(aa);
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
}
public void onItemClick(AdapterView<?> a, View v, int pos, long id) {
Intent it = new Intent(this, Edit.class);
it.putExtra("number", pos+1);
it.putExtra("memo", aMemo[pos]);
startActivityForResult(it, pos);
}
public boolean onItemLongClick(AdapterView<?> a, View v, int pos, long id) {
aMemo[pos] = (pos+1) + ".";
aa.notifyDataSetChanged();
return true;
}
protected void onActivityResult(int requestCode, int resultCode, Intent it) {
if(resultCode == RESULT_OK) {
aMemo[requestCode] = it.getStringExtra("memo");
aa.notifyDataSetChanged();
}
}
}
【问题讨论】:
-
requestCode 和 ActivityResultContracts.StartActivityForResult 有两种方式。这个答案可能对你有用。 stackoverflow.com/a/67887946/20839582
标签: java android onactivityresult