嘿伙计们我正在安装Android工作室的应用程序。我有一个列表视图,当我做出选择时,我想将该选择添加到另一个活动中的另一个列表视图中。最简单/最好的方法是什么?我没有运气就试过putExtra。任何例子或想法都会很棒。感谢你们。
感谢大家的例子,他们帮助我更好地理解了意图系统。我一直在尝试每个人发布的不同例子,而且我已经陷入困境。目标只是让我从Walmart.java文件中的listview中选择的项目显示在GiftsSelected.java的listview中我有另一个地方打开活动所以我不需要它立即打开新活动。 这是我的代码:
这是Walmart.java
public class Walmart extends ActionBarActivity {
private String[]giftarray = {
"Apple" ,
"Bananas",
"Bed",
"Beef",
"Bottle",
"Bread",
"Broccoli",
"Carrots",
"Cat",
"Chicken",
"Chocolate",
"Computer",
"Cow",
"Crow",
"Dog",
"Dolphin",
"Dove",
"Drawer",
"Egg",
"Fish",
"Fork",
"Fridge",
"Giraffe",
};
Intent a = new Intent(Walmart.this,GiftsSelected.class);
private ListView giftListView;
private ArrayAdapter arrayAdapter;
ArrayList<String> list = new ArrayList<String>();
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){}
public boolean onContextItemSelected(MenuItem item){
return true;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_walmart);
getSupportActionBar().hide();
giftListView = (ListView) findViewById(R.id.gift_list1);
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_gallery_item, giftarray );
giftListView.setAdapter(arrayAdapter);
giftListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = "Item added to registry";
list.add(item2);
a.putStringArrayListExtra("list",list);
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
}
});
}
这是我的GiftsSelected.java代码:
public class GiftsSelected extends ActionBarActivity {
private ListView giftListView;
private ArrayAdapter arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
ArrayList<String> list = new ArrayList<String>();
//This makes my app crash which makes me think I did this wrong...
list = getIntent().getStringArrayListExtra("list");
String[] giftarray = new String[list.size()];
list.toArray(giftarray);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gifts_selected);
getSupportActionBar().hide();
giftListView = (ListView) findViewById(R.id.gift_list1);
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_gallery_item, giftarray);
giftListView.setAdapter(arrayAdapter);
giftListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = "Item added to your registry";
Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
}
});
}
答案 0 :(得分:2)
这是我使用的列表
ArrayList<String> list = new ArrayList<String>();
像这样添加元素
list.add("something");
第一个活动中的
Intent i=new Intent(FirstActivity.this,SecondActivity.class);
i.putStringArrayListExtra("list",list);
startActivity(i);
在onCreate
中的第二个活动中list = getIntent().getStringArrayListExtra("list");
答案 1 :(得分:1)
假设第一个Activity是X而X拥有一个listview,它更新了Activity Y中的另一个listview。
如果X与Y紧密相关,也就是说Y启动X,获取数据然后立即返回Y,那么您应该使用Y中的startActivityForResult
。
class ActivityY {
public static final int REQUEST_CODE = 2;
...
Intent i = new Intent(this, ActivityX.class);
startActivityForResult(i, REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
String returndata = data.getStringExtra("rowdata");
//update your listView, do notifyDataSetChanged() etc;
}
}
}
}
class ActivityX {
// in listview onItemClickListener or elsewhere that listens to row click
Intent intent = new Intent();
returnIntent.putExtra("rowdata", rowdata); // whatever data you need to transfer
setResult(RESULT_OK,intent);
finish();
}
如果X和Y松散相关,也就是说X不一定从Y启动,而是转到Y,那么你应该使用通常的startActivity(intent)
。
如果X和Y是完全独立的,也就是说X不一定从Y启动,在到达Y之前可能不会转到Y或漫游其他活动,那么你应该缓存数据。如果数据量很小,那么最好的方法是将其存储在Preferences中。当您启动Y活动时,获取数据,更新ListView,然后根据需要从首选项中删除缓存数据。
答案 2 :(得分:0)
a)您可以将listview项目对象设为parcelable,并通过intent extra在活动之间发送它。 b)您可以将选定的列表视图项保存在全局变量中。(不推荐)