2015-04-27 70 views
1

嘿,我正在android工作室的应用程序工作。我有一个列表视图,当我做出选择时,我想在另一个活动中将该选择添加到另一个列表视图。什么是最简单/最好的方法来做到这一点?我试过putExtra没有任何运气。任何例子或想法都会很棒。感谢你们。如何将数据从一个活动发送到另一个listview?

感谢大家的例子,他们已经让我明白了很多美好的意图系统。我一直在尝试每个人都发布的不同例子,而且我一直陷入困境。我们的目标很简单,就是有我从Walmart.java文件列表视图中选择在GiftsSelected.java列表视图我有另一个地方打开相应的活动所以显示的项目我并不需要它立即打开新的活动。 这里是我的代码:

这是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(); 


     } 
    }); 
} 

回答

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"); 
0

a)您可以使ListView项对象parcelable并通过意向课外活动之间发送。 b)你可以保存选定的ListView项中的全局变量。(不推荐)

1

比方说,第一个活动是X和X拥有一个ListView,在活动Y.更新另一个列表视图

如果X密切相关的Y,也就是说Ÿ推出X,立即获取数据,然后返回到Y,那么你应该使用startActivityForResult从Y.

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,然后根据需要从首选项中移除缓存的数据。

相关问题