Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将数据从一个活动发送到另一个listview?_Android - Fatal编程技术网

Android 如何将数据从一个活动发送到另一个listview?

Android 如何将数据从一个活动发送到另一个listview?,android,Android,嘿,伙计们,我正在android studio中开发一个应用程序。我有一个listview,当我做出选择时,我想将该选择添加到另一个不同活动中的listview。最简单/最好的方法是什么?我试过putExtra,但运气不好。任何例子或想法都很好。谢谢你们 谢谢大家的例子,他们帮助我更好地理解了意图系统。我一直在尝试不同的例子,每个人都张贴,我有点被卡住了。目标只是让我从Walmart.java文件的listview中选择的项目显示在GiftsSelected.java的listview中。我有另

嘿,伙计们,我正在android studio中开发一个应用程序。我有一个listview,当我做出选择时,我想将该选择添加到另一个不同活动中的listview。最简单/最好的方法是什么?我试过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();


        }
    });

}
公共类沃尔玛扩展了ActionBarActivity{
私有字符串[]giftarray={
“苹果”,
“香蕉”,
“床”,
“牛肉”,
“瓶子”,
“面包”,
“西兰花”,
“胡萝卜”,
“猫”,
“鸡”,
“巧克力”,
“计算机”,
“奶牛”,
“乌鸦”,
“狗”,
“海豚”,
“鸽子”,
“抽屉”,
“鸡蛋”,
“鱼”,
“叉子”,
“冰箱”,
“长颈鹿”,
};
意向a=新意向(Walmart.this,GiftsSelected.class);
私有ListView giftListView;
专用阵列适配器阵列适配器;
ArrayList=新建ArrayList();
public void onCreateContextMenu(ContextMenu菜单,视图v,ContextMenu.ContextMenuInfo菜单信息){}
公共布尔值onContextItemSelected(MenuItem项){
返回true;
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_沃尔玛);
getSupportActionBar().hide();
giftListView=(ListView)findViewById(R.id.gift\u list1);
arrayAdapter=新的arrayAdapter(这个,android.R.layout.simple\u gallery\u项目,giftarray);
giftListView.setAdapter(arrayAdapter);
giftListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
String item=“添加到注册表的项目”;
增加(第2项);
a、 putStringArrayListExtra(“列表”,列表);
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();


        }
    });
}
public class giftselected扩展了ActionBarActivity{
私有ListView giftListView;
专用阵列适配器阵列适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
ArrayList=新建ArrayList();
//这让我的应用程序崩溃,这让我觉得我做错了。。。
list=getIntent().getStringArrayListExtra(“列表”);
String[]giftarray=新字符串[list.size()];
托雷(吉夫塔雷);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u已选择);
getSupportActionBar().hide();
giftListView=(ListView)findViewById(R.id.gift\u list1);
arrayAdapter=新的arrayAdapter(这个,android.R.layout.simple\u gallery\u项目,giftarray);
giftListView.setAdapter(arrayAdapter);
giftListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
String item=“添加到注册表的项目”;
Toast.makeText(getBaseContext(),item,Toast.LENGTH_LONG.show();
}
});
}

这是我使用的列表

  ArrayList<String> list = new ArrayList<String>();
在第一个活动中

Intent i=new Intent(FirstActivity.this,SecondActivity.class);
i.putStringArrayListExtra("list",list);
startActivity(i);
在onCreate中的第二个活动中

list = getIntent().getStringArrayListExtra("list");
a) 您可以将listview项对象包裹起来,并通过intent extra在活动之间发送它。
b) 您可以将所选listview项保存在全局变量中。(不推荐)

假设第一个活动是X,X持有一个listview,该listview更新活动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或漫游其他活动,则应缓存数据。如果数据大小较小,则最好将其存储在中。当Y活动开始时,获取数据,更新ListView,然后在需要时删除cac从首选项中删除数据

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();       
}