我正在努力学习如何通过 LinkedList<PassedObject>
来自 MainActivity
至 SecondActivity
.
所以我在每个 Activity 中创建了一个 ListView 来检查对象是否被传递。如果列表为空,SecondActivity 将显示在 TextView 中。我还制作了一个实现 Parcelable 的 PassedObject 类。问题是,当我从 Intent 获取列表时,它是空的。在下面的代码中,我将 LinkedList 更改为 ArrayList,因为我认为这就是问题所在。我做错了什么?
public class MainActivity extends AppCompatActivity {
private ArrayList<PassedObject> mainList;
private ListView listView;
private CustomArrayAdapter adapter;
Button test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(mainList == null){
mainList = new ArrayList<PassedObject>();
}
mainList.add(new PassedObject("Passed"));
mainList.add(new PassedObject("Passed"));
mainList.add(new PassedObject("Passed"));
mainList.add(new PassedObject("Passed"));
listView = (ListView) findViewById(R.id.listViewMain);
adapter = new CustomArrayAdapter(getBaseContext(),R.layout.item_list,mainList);
listView.setAdapter(adapter);
Button test = (Button) findViewById(R.id.button_id);
test.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putParcelableArrayListExtra("list",mainList);
startActivity(intent);
}
});
}
public class CustomArrayAdapter extends android.widget.ArrayAdapter<PassedObject>{
Context _context;
int layoutRestId;
ArrayList<PassedObject> data;
public CustomArrayAdapter(Context context, int resource, ArrayList<PassedObject> objects) {
super(context, resource, objects);
_context = context;
layoutRestId = resource;
data = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null) {
LayoutInflater inflater = (LayoutInflater) _context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(layoutRestId, parent, false);
}
TextView tv = (TextView) convertView.findViewById(R.id.textViewItem);
tv.setText(data.get(position).getName());
return convertView;
}
}
}
public class SecondActivity extends AppCompatActivity {
TextView tv ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
tv = (TextView) findViewById(R.id.seocndListText);
ArrayList<PassedObject> list =(ArrayList<PassedObject>) getIntent().getParcelableExtra("list");
tv.setText(list.isEmpty()+"");
}
}
public class PassedObject implements Parcelable{
private String _name;
PassedObject(String name){
_name = name;
}
public String getName(){
return _name;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(_name);
}
public PassedObject(Parcel in){
_name = in.readString();
}
public static final Parcelable.Creator<PassedObject> CREATOR = new Parcelable.Creator<PassedObject>() {
@Override
public PassedObject createFromParcel(Parcel source) {
return new PassedObject(source);
}
@Override
public PassedObject[] newArray(int size) {
return new PassedObject[size];
}
};
}
最佳答案
更改以下行
ArrayList<PassedObject> list =(ArrayList<PassedObject>) getIntent().getParcelableExtra("list");
成为
ArrayList<PassedObject> list = getIntent().getParcelableArrayListExtra("list");
关于java - 在 Activity 之间传递 LinkedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31726019/