2013-07-23 2 views
1

Я использую monodroid для приложения. В приложении пользователь нажимает кнопку, которая идет в listview, что список имеет несколько параметров, пользователь выбирает вариант, а затем этот параметр отправляется обратно в исходный класс, где текстовое представление изменяется на тот же текст, что и параметр на listview, который был выбран.Не удается получить данные от намерения

Ниже класс, который посылает данные

protected override void OnListItemClick(ListView l, View v, int position, long id) 
    { 
     int t = labels[position]; 
     String text = t + ""; 

     Intent send = new Intent(this, typeof(CreateVehicle)); 
     send.SetFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop); 
     send.PutExtra("t", "Data from FirstActivity"); 
     StartActivity(send); 

    } 

Ниже получающее класс:

protected override void OnResume() 
    { 
     base.OnResume(); // Always call the superclass first. 

     TextView tvYearChange = FindViewById<TextView>(Resource.Id.tvYearchange); 

     string text = Intent.GetStringExtra("t") ?? "work"; 

     tvYearChange.SetText(text, null); 

    } 

Если кто-то мог понять, почему я не получаю данные, которые было бы здорово.

ответ

0

Я не уверен, правильно ли у вас возникла проблема, но, полагаю, ваша основная деятельность вызывает операцию с 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, там у них много полезного материала.

Надеюсь, это вам поможет.

+0

результат @set посылает пристальный право? –

+0

Я забыл упомянуть, что в основном действии есть тексты редактирования, мне это нужно, чтобы, если вы перейдете к списку и верните тексты редактирования, которые заполнены, все еще остаются заполненными –

+0

№ setResult просто устанавливает переменную в намерении заявив, что деятельность сделала то, что ожидалось, и результаты должны быть собраны. Трюк здесь заключается в том, что вы начали работу с List, используя startActivityForResult, что означает, что когда вы вернетесь в MainActivity, первый метод, который будет выполняться, будет onActivityResult с переменной данных, являющейся намерением, которую вы создали в myList (send) и resultCode, вы устанавливаете в setRestult. –

0

в Receiver деятельности получают данные намерения, как показано ниже

Intent intent = getIntent(); 
string text = intent.getStringExtra("t"); 
Смежные вопросы