簡體   English   中英

如何將數據從一個活動發送到另一個列表視圖?

[英]How to send data from one activity to another listview?

嘿家伙我正在android studio中的應用程序上工作。 我有一個列表視圖,當我做出選擇時,我想將該選擇添加到另一個活動中的另一個列表視圖中。 最簡單/最好的方法是什么? 我試過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();


        }
    });
}

這是我使用的列表

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

假設第一個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,然后根據需要從首選項中刪除緩存數據。

a)您可以將listview項目對象設為parcelable,並通過intent extra在活動之間發送它。 b)您可以將選定的列表視圖項保存在全局變量中。(不推薦)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM