从对象arraylist获取值并将其显示在另一个活动中

时间:2016-08-15 07:49:20

标签: java android arraylist

public class User implements Parcelable
{
 private  int Id;
 private  String Name;
 private  String Desg;

 public User() {
     super();
}
@Override
public int describeContents() {
    // TODO Auto-generated method stub
     return 0;
 }

 public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(Name);
    dest.writeInt(Id);
    dest.writeString(Desg);

}
  private User(Parcel in){
        this.Name = in.readString();
        this.Id = in.readInt();
        this.Desg = in.readString();

    }

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {

        @Override
        public User createFromParcel(Parcel source) {
            return new User(source);
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
public int getId() {
    return Id;
}
public void setId(int id) {
    this.Id = id;
}
public String getName() {
    return Name;
}
public void setName(String name) {
    this.Name = name;
}
 public String getDesg() {
    return Desg;
}
public void setDesg(String desg) {
    this.Desg = desg;
}
}


public class SecondActivity extends Activity {

ArrayList<User> userlist = new ArrayList<User>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);

       Button btn = (Button)findViewById(R.id.add);


        btn.setOnClickListener(new OnClickListener(){

         public void onClick(View v)
         {
             EditText name = (EditText)findViewById(R.id.name);
             EditText desg= (EditText)findViewById(R.id.desg);
             EditText id = (EditText)findViewById(R.id.id);
             User user = new User();
             user.setName(name.getText().toString());
             user.setDesg(desg.getText().toString());
             user.setId(Integer.parseInt(id.getText().toString())); //in case if type is integer



         if(userlist.contains(user))
             {
                 Toast.makeText(getBaseContext(), "Already Added", Toast.LENGTH_SHORT).show();
             }
             else{
                 userlist.add(user);


             }
                 Intent intent = new Intent(SecondActivity.this, MainActivity.class);
                 intent.putExtra("userlist",userlist);
                 startActivity(intent);
                 finish();
         }
     });

}



public class MainActivity extends Activity {
   ListView show;
   ArrayList<User> myList= new ArrayList<User>();      
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 
     show = (ListView)findViewById(R.id.list);
     myList=   getIntent().getParcelableExtra("userlist");
     ArrayAdapter<User> adapter = new ArrayAdapter<User>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, myList);
     show.setAdapter(adapter);

     System.out.println(show);

     show.setOnItemClickListener(new AdapterView.OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

         CheckedTextView checkedTextView = ((CheckedTextView)view);
         checkedTextView.setChecked(!checkedTextView.isChecked());
         Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_SHORT).show();
         }      
     });         
}

public void onClick(View v)
{
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
}

我将不同数据类型的用户输入存储在arraylist中,然后点击按钮我想在复选框的列表视图中显示该用户输入(arraylist)。但即使没有错误,此代码也无法正常工作。有人请告诉我这里可能存在一些逻辑问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用intent extras将值从一个活动传递到另一个活动。以下是向目标活动发送值的示例:

Intent intent = new Intent(OriginActivity.this, TargetActivity.class); intent.putExtra("variableName", variableValue); startActivity(intent)

这将发送数据&#34; variableName&#34;与目标活动的对应值。要检索已发送的数据,必须先在目标活动中获取intent的实例,然后调用特定于类型的函数以返回该值。如果函数找不到指定的数据或数据不存在,您还必须提供默认值。例如,如果要检索整数,可以这样做:

int retrievedValue= getIntent().getIntExtra("variableName", defaultValue);

PS:你可能想要把你的活动,模型等分成不同的类文件。

答案 1 :(得分:0)

最佳方式

intent.putParcelableArrayListExtra("userlist" , userlist);

提取

myList= (ArrayList<User>) getIntent().getParcelableArrayListExtra("userlist");

替代方式

你必须将每个arraylist项目单独放入intent中,然后相应地检索它。

Intent intent = new Intent(SecondActivity.this, MainActivity.class);
for (int i = 0; i<userlist.size(); i++)
     intent.putExtra("userlist_"+i , userlist.get(i));
intent.putExtra("userlist_size" , userlist.size());
startActivity(intent);
finish();

现在检索它。

ArrayList<User> myList= new ArrayList<User>();  
int size = getIntent().getIntExtra("userlist_size" , 0);
for(int i=0; i<size ; i++){
   myList.add((User)(getIntent().getParcelableExtra("userlist_"+i)))
}