Pass ArrayList<? implements Parcelable> to Activity

前端 未结 6 1803
礼貌的吻别
礼貌的吻别 2020-11-27 04:20

I have searched a few topics but not found a solution to my problem.

public class Series implements Parcelable {
private String name;
private int numOfSeaso         


        
相关标签:
6条回答
  • 2020-11-27 04:52

    I've used putParcelableArrayList(<? extends Parcelable>) from a Bundle Object. Not directly from an Intent Object.(I don't really know what's the difference). but i use to use in this way:

    ArrayList<ParcelableRow> resultSet = new ArrayList<ParcelableRow>();
    resultSet = loadData();
    
    Bundle data = new Bundle();
    data.putParcelableArrayList("search.resultSet", resultSet);
    yourIntent.putExtra("result.content", data);
    startActivity(yourIntent);
    

    Later on your new activity you can populate the data recently inserted on the Bundle object like this:

    Bundle data = this.getIntent().getBundleExtra("result.content");
    ArrayList<ParcelableRow> result = data.getParcelableArrayList("search.resultset");
    

    Just remember that your ArrayList<> must contain only parcelable objects. and just to make sure that your have passed the data you may check if the data received is null or not, just to avoid issues.

    0 讨论(0)
  • 2020-11-27 04:56

    I am doing it in this way:

    var intent = Intent(this@McqActivity,ResultActivity::class.java)
    intent.putParcelableArrayListExtra("keyResults", ArrayList(resultList)) 
    // resultList  is of type mutableListOf<ResultBO>()  
     startActivity(intent)
    

    And for making the class Parcelable . I simply do two operation first I used @Parcelize Annotation above my data class and secondly I inherit it with Parcelable like below..

    import kotlinx.android.parcel.Parcelize
    import android.os.Parcelable
    
    @Parcelize // Include Annotion 
    data class ResultBO(val questionBO: QuestionBO) : Parcelable {
        constructor() : this(QuestionBO())
    }
    

    And at receiving end

    if (intent != null) {
         var results = intent.getParcelableArrayListExtra<Parcelable>("keyResults")
    }
    
    0 讨论(0)
  • 2020-11-27 05:03
    • The problem is in writing out to the parcel and reading in from the parcel ...

      @Override
      public void writeToParcel(Parcel dest, int flags) {
          dest.writeString(name);
          dest.writeInt(numOfSeason);
          dest.writeInt(numOfEpisode);
      }
      
      private void readFromParcel(Parcel in) {
          name = in.readString();
          numOfSeason = in.readInt();
          numOfEpisode = in.readInt();
      }
      
    • What you write out has to match what you read in...

      @Override
       protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      Intent i = new Intent(this,SecondActivity.class);
      
      ArrayList<testparcel> testing = new ArrayList<testparcel>();
      
      i.putParcelableArrayListExtra("extraextra", testing);
      startActivity(i);
      }
      
          /**********************************************/
      
      
      public class SecondActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          ArrayList<testparcel> testing = this.getIntent().getParcelableArrayListExtra("extraextra");
       }
      }
      
    • The above code is having onCreate() from two different activities. The first one launches the second one; and it works fine I was able to pull the parcelable without issue.

    0 讨论(0)
  • 2020-11-27 05:04

    You can pass Parcelable ArrayList

    Sender Activity ->

    startActivity(Intent(this, SenderActivity::class.java).apply { putExtra("getList",list)})

    Receiver Activity ->

    private lateinit var list: ArrayList<List>

    list = this.intent.extras?.getParcelableArrayList("getList")!!

    And you will get all Arraylist in list.

    0 讨论(0)
  • 2020-11-27 05:05

    You should use the putParcelableArrayListExtra() method on the Intent class.

    0 讨论(0)
  • 2020-11-27 05:17

    Maybe this helps someone.. else my problem was that I used write and readValue but it should match type like writeInt, readInt writeString, readString and so forth

    0 讨论(0)
提交回复
热议问题