Я не уверен, правильно ли у вас возникла проблема, но, полагаю, ваша основная деятельность вызывает операцию с ListView, а затем вы хотите, чтобы результат возвращался в основное действие, правильно?
Если это так, то код, который вы указали, - это неправильный способ сделать то, что вы хотите. Вы хотите использовать StartActivityForResult
и переопределить метод onActivityResult
в вашем основном виде деятельности.
Я не знаю точно, как использовать Monodroid и C#, но я могу дать вам пример в Java, что я уверен, поможет вам понять, как получить то, что вы хотите:
Скажем, моя ListView деятельность называется myList и расширяет ListActivity, и моя основная деятельность называется MainActivity. Ниже приведен метод OnListItemClick из MyList:
@Override
protected void onListItemClick(ListView l, View v, int position, long id){
super.onListItemClick(l, v, position, id);
String text = String.valueOf(labels[position]);
// Create the intent with the extras
Intent send = new Intent();
send.putExtra("text_from_list", text);
// Set the result to OK (meaning the extras are put as expected by the caller)
setResult(RESULT_OK, send);
// you need this so the caller (MainActivity) knows that the user completed
// this activity (myList) as expected (clicking on the item to return a result)
// and didn't just leave the activity (back button)
// Close this List Activity
finish();
}
Ниже метод в моей Основная деятельность что вызывает MyList:
private void callListActivity(){
Intent call = new Intent(MainActivity.this, myList.class);
startActivityForResult(call, 1);
// The second field is just a number to identify which activity
// returned a result when a result is received (you can have
// several calls to different activities expecting results from
// each one of them). This number is called requestCode.
}
Вы должны замещать onActivityResult
в вашем MainActivity что-то вроде этого:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check if the returned data came from myList (requestCode 1) and if
// data was actually received (check if resultCode = RESULT_OK)
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
String text = data.getStringExtra("text_from_list");
// you have to use the same string identifier you used
// when you put the extra in the Intent in myList
TextView tvYearChange = (TextView)findViewById(R.id.tvYearchange);
tvYearChange.setText(text);
}
else {
// Do something if the Activity didn't return data
// (resultCode != RESULT_OK)
}
}
// If you are expecting results from other Activities put more if
// clauses here with the appropriate request code, for example:
// if (requestCode == 2) {
// DoSomething;
// }
// And so on...
}
Нельзя будет изменить этот код Java на код C#, который вы можете использовать с Monodroid. Кроме того, взгляните на this link из Официальной документации Android, там у них много полезного материала.
Надеюсь, это вам поможет.
результат @set посылает пристальный право? –
Я забыл упомянуть, что в основном действии есть тексты редактирования, мне это нужно, чтобы, если вы перейдете к списку и верните тексты редактирования, которые заполнены, все еще остаются заполненными –
№ setResult просто устанавливает переменную в намерении заявив, что деятельность сделала то, что ожидалось, и результаты должны быть собраны. Трюк здесь заключается в том, что вы начали работу с List, используя startActivityForResult, что означает, что когда вы вернетесь в MainActivity, первый метод, который будет выполняться, будет onActivityResult с переменной данных, являющейся намерением, которую вы создали в myList (send) и resultCode, вы устанавливаете в setRestult. –