java - 在 Activity 之间传递 LinkedList

标签 java android

我正在努力学习如何通过 LinkedList<PassedObject>来自 MainActivitySecondActivity . 所以我在每个 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/

相关文章:

java - java中获取磁盘的唯一标识符

java - 如何获取 LocalTime 变量的毫秒数?

java - 如何访问 c :forEach loop value from a scriptlet?

java - 将字符串从控制台输入传递到 TCP 套接字

android - StartActivity调用需要权限问题

java - 如何在java中获得上个月/一年?

java - 建议使用哪种数据结构返回两个值

android - 在 EditBox 上创建带边距的背景图片

android - 通话记录中的自定义操作

android - HashMap 无法转换为 java.lang.string