2013-11-23 3 views
1

Я знаю, что было много вопросов по этой теме, но я не могу найти ответ для моего конкретного случая. В принципе у меня есть двухмерный массив довольно простого класса, который мне нужно передать. Я пытаюсь использовать Parcelable и я побежал мой класс через this, чтобы получить это:Пропустить 2D-объект между действиями

import android.os.Parcel; 
import android.os.Parcelable; 

public class Notam implements Parcelable { 
public String airfield; 
public String identifier; 
public String notamText; 
public String fromTime; 
public String untilTime; 
public boolean hidden; 

// one constructor 
public Notam(String airfieldname, String newIdentifier, String newNotamText, String newFrom, String newUntil) { 
    airfield = airfieldname; 
    identifier = newIdentifier; 
    notamText = newNotamText; 
    fromTime = newFrom; 
    untilTime = newUntil; 
} 


public void setHidden(boolean changeHidden) { 
    hidden = changeHidden; 
} 


protected Notam(Parcel in) { 
    airfield = in.readString(); 
    identifier = in.readString(); 
    notamText = in.readString(); 
    fromTime = in.readString(); 
    untilTime = in.readString(); 
    hidden = in.readByte() != 0x00; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(airfield); 
    dest.writeString(identifier); 
    dest.writeString(notamText); 
    dest.writeString(fromTime); 
    dest.writeString(untilTime); 
    dest.writeByte((byte) (hidden ? 0x01 : 0x00)); 
} 

@SuppressWarnings("unused") 
public static final Parcelable.Creator<Notam> CREATOR = new Parcelable.Creator<Notam>() { 
    @Override 
    public Notam createFromParcel(Parcel in) { 
     return new Notam(in); 
    } 

    @Override 
    public Notam[] newArray(int size) { 
     return new Notam[size]; 
    } 
}; 
} 

Я пробовал всякие вещи, которые я нашел здесь, но теперь я потерял. На данный момент в Основной деятельности У меня есть

Notam[][] notamList = new Notam[10][100]; 

Intent intent = new Intent(this, NotamList.class); 
Bundle bundle = new Bundle(); 
bundle.putParcelableArrayList("notamList", notamList); 
intent.putExtras(bundle); 
startActivity(intent); 

, а затем в принимающей деятельности:

Notam[][] notamList = new Notam[10][100]; 

Bundle data = getIntent().getExtras(); 
notamList = data.getParcelableArrayList("notamList"); 

Но это даже не близко к работе, поэтому я прошу вашу мудрость и руководство!

+0

Просьба пояснить, что означает «даже не близко к работе». – Egor

+0

Ну, у меня есть эта ошибка в главной деятельности «Метод putParcelableArrayList (String, ArrayList ) в типе Bundle не применим для аргументов (String, Notam [] [])" и в принимающей активности "Multiple маркеры на этой линии \t - несоответствие типа: не может конвертировать из NOTAM в NOTAM [] \t - несоответствие типа: не может конвертировать из ArrayList в NOTAM [] []» – Gavin

ответ

2

В вашем MainActivity:

Notam[][] notamList = new Notam[10][100]; 

Это правильный способ создать объект NOTAM? Я так не думаю. Посмотрите на свой конструктор:

public Notam(String airfieldname, String newIdentifier, String newNotamText, String newFrom, String newUntil) { ... } 

Во-вторых, опять-таки в MainActivity, вы создаете связку и начинку Parcelable объект в него, а затем начинку сверток в намерения. Вы можете прямо поставить объект Parcelable в намерение следующим образом:

intent.putExtras("notamList", correctly_instantiated_Notam_obj); 

HTH. PS: Вы можете использовать java Serializable в случае, если вы знакомы с этим, чем с использованием Parcels. PS: Вы можете посмотреть на это example

+0

Я просто инициализацией массива там. Позже я заполню его notamList [Integer.parseInt (Params [1])] [счетчик ++] = новый NOTAM (\t \t \t \t \t \t Params [0], link.text(). Подстрока (0, 8), текст, от до); – Gavin

+0

Также пример, который вы связали, как и все другие, которые я видел. Он просто проходит один класс. Я пытаюсь передать 2D-массив классов. Это моя проблема? Или я не пытаюсь это сделать, и я должен пытаться сделать что-то еще? – Gavin

+0

Обычно вы отправляете один объект за раз. Теперь нет ничего, что помешает вам создать еще один класс с ArrayList вашего базового класса Notam или ArrayList из ArrayList's. Вы могли бы это сделать, или вы могли бы создать серию aim.putExtras («notamList_» + row_num + «_» + col_num, correct_instantiated_Notam_obj); через петлю вложенного цикла и unmarshall на другом конце соответственно. Слева к твоему творчеству. НТН. –

0

Насколько я могу судить, это невозможно. Вам нужно создать отдельного arraylist и передать это в соответствии с комментариями.

Смежные вопросы