2015-04-27 2 views
1

Эй, ребята, я работаю над приложением в андроид-студии. У меня есть список, и когда я делаю выбор, я хотел бы добавить этот выбор в другой список в другой активности. Каков самый простой/лучший способ сделать это? Я пробовал putExtra без везения. Любые примеры или идеи были бы замечательными. Спасибо вам, ребята.Как отправить данные из одного вида деятельности в другой список?

Спасибо за примеры, которым они помогли мне лучше понять систему намерений. Я пробовал разные примеры, которые все выложили, и я как бы застрял. Цель состоит в том, чтобы просто выбрать элементы, которые я выбираю из списка в файле 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

а) Вы можете сделать ListView пункт объекта parcelable и отправить его между деятельностью через намерение дополнительно. б) Вы можете сохранить выбранный элемент ListView в глобальной переменной. (Не рекомендуется)

1

Скажем, первая активность является X и X имеет ListView, который обновляет другой ListView в активность Y.

Если X является тесно связана с Y, то есть 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 являются слабо связаны между собой, то есть Х не обязательно запускается с Y, но идет к Y, тогда вы должны просто использовать обычный startActivity(intent).

Если X и Y полностью независимы, то есть X не обязательно запускается из Y, может не перейти к Y или не бродить по другим действиям до прибытия в Y, тогда вы должны кэшировать данные. Если размер данных невелик, лучшим способом является его сохранение в Preferences. Когда вы начинаете Y, получите данные, обновите ListView, а затем, если необходимо, удалите кешированные данные из Preferences.

Смежные вопросы