2015-04-27 72 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,然後根據需要從首選項中移除緩存的數據。

相關問題