Передать 2D-массив в другое действие

как передать объект массива 2 номиналов в качестве параметра другому действию

как получить строковое значение двумерного массива в другом действии

   String [][]str;

    Intent l = new Intent(context,AgAppMenu.class);
                 l.putExtra("msg",str);
                 l.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
                 context.startActivity(l);



  another Activity class

   String[][] xmlRespone2;

    xmlRespone2 = getIntent().getExtras().getString("msg");

person Christina Ayers    schedule 31.08.2012    source источник


Ответы (5)


Вы можете использовать putSerializable. Массивы сериализуемы.

Хранить:

bundle.putSerializable("list", selected_list); // Здесь bundle — это объект Bundle.

Чтобы получить доступ:

String[][] passedString_list = (String[][]) bundle.getSerializable("list");

Пример

Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.putSerializable("list", selected_list);
mIntent.putExtras(mBundle);
person Chirag    schedule 31.08.2012
comment
когда я получаю доступ к этому объекту в разных классах, bunvle делает ошибку - person Christina Ayers; 31.08.2012
comment
public void onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.agappmenu); mno = getIntent().getExtras().getString(mno); pinno = getIntent().getExtras().getString(pinno); String[][] xmlRespone2 = (String[][]) bundle.getSerializable(msg); - person Christina Ayers; 31.08.2012
comment
пакет не разрешается в другом действии, где я получаю доступ к этому значению - person Christina Ayers; 31.08.2012
comment
Попробуй это . Bundle bundle = getIntent().getExtras(); (String[][]) bundle.getSerializable(msg); - person Chirag; 31.08.2012
comment
@Кристина Айерс. Если мой ответ работает для вас, пожалуйста, примите его. - person Chirag; 01.09.2012
comment
@ChiragRaval Привет, я пытался выполнить ваши шаги, но когда я добрался до resultMatrix = (double[][]) bundle.getSerializable("resultMatrix_");, я получил исключение java.lang.Object[] cannot be cast to double[][]. - person Don Larynx; 17.05.2015

Это, наконец, хорошо работает для меня:

Чтобы начать новую активность (отправив String[][] и String):

String[][] arrayToSend=new String[3][30];
String stringToSend="Hello";
Intent i = new Intent(this, NewActivity.class);

i.putExtra("key_string",stringToSend);

Bundle mBundle = new Bundle();
mBundle.putSerializable("key_array_array",  arrayToSend);
i.putExtras(mBundle);

startActivity(i);

Для доступа в NewActivity.onCreate:

String sReceived=getIntent().getExtras().getString("key_string");

String[][] arrayReceived=null;
Object[] objectArray = (Object[]) getIntent().getExtras().getSerializable("key_array_array");
if(objectArray!=null){
    arrayReceived = new String[objectArray.length][];
    for(int i=0;i<objectArray.length;i++){
        arrayReceived[i]=(String[]) objectArray[i];
    }
}
person Symeroro    schedule 28.09.2013

Вы можете определить собственный класс, который реализует Parcelable и содержит логику для чтения и записи двумерного массива из/в Parcel. После этого поместите этот объект внутрь Bundle для перевозки.

person waqaslam    schedule 31.08.2012

установите 2darray как public static void. пусть current_class будет классом, в котором мы создаем наш 2d-массив. Мы хотим передать данные в NewActivity

Class<?> ourClass=Class.forName("com.example.testapp.NewActivity");
Intent ourIntent= new Intent(current_class.this,ourClass);
intent_name.putExtra("name", 2darray_name);
startActivity(ourIntent);`

чтобы получить к нему доступ в NewActivity, используйте current_class.2darray_name, где current_class — это класс, в котором он был первоначально определен.

person ben_joseph    schedule 23.10.2013

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

Class A{
 public static String [][]str;
...
    Intent l = new Intent(context,AgAppMenu.class);
                 l.putExtra("msg",str);
                 l.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
                 context.startActivity(l);


}

Class B{

...
you can use it with Just A.(ArrayName)
System.out.println(A.str);

}

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

person Bhavesh Patadiya    schedule 31.08.2012