Передача списка другому действию в Android
Я создал список и хотел бы передать список другому действию, но я получаю ошибку в инструкции putExtra при создании намерения. Просто интересно, есть ли простой способ передать список строк, а не одну строку?
спасибо
private List<String> selItemList;
private ListView mainListView = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipes);
Button searchBtn = (Button) findViewById(R.id.searchButton);
searchBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (selItemList == null) {
Toast.makeText(getApplicationContext()," Please Make A Selection ", Toast.LENGTH_SHORT).show();
} else {
Intent intent = new Intent(Recipes2.this, XMLParser.class);
intent.putExtra("items_to_parse", selItemList);
startActivityForResult(intent, 0);
}
}
});
3 ответов
вы не можете передать список в Intent.putExtras(String name, List<?> list);
.
Я думаю, вы можете использовать Array
of String
и передать его в putExtras
такой:
private List<String> selItemList;
private ListView mainListView = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipes);
Button searchBtn = (Button) findViewById(R.id.searchButton);
searchBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (selItemList == null) {
Toast.makeText(getApplicationContext(), "Please Make A Selection", Toast.LENGTH_SHORT).show();
} else {
String[] selItemArray = new String[selItemList.size()];
// Copy your List of Strings into the Array, and then pass it in your intent
// ....
Intent intent = new Intent(Recipes2.this, XMLParser.class);
intent.putExtra("items_to_parse", selItemArray);
startActivityForResult(intent, 0);
}
}
});
можно использовать putStringArrayListExtra
С Intent
общественное намерение putStringArrayListExtra (Имя строки, значение ArrayList)
private final List<String> selItemList;
private ListView mainListView = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipes);
Button searchBtn = (Button) findViewById(R.id.searchButton);
searchBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (selItemList == null) {
Toast.makeText(Recipes2.this," Please Make A Selection ", Toast.LENGTH_SHORT).show();
} else {
Intent intent = new Intent(Recipes2.this, XMLParser.class);
intent.putStringArrayListExtra("items_to_parse", (ArrayList<String>) selItemList);
startActivityForResult(intent, 0);
}
}
});
и в вашем XMLParser.класс:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getExtras() != null) {
for(String a : getIntent().getExtras().getStringArrayList("items_to_parse")) {
Log.d("=======","Data " + a);
}
}
Я знаю, что немного поздно, и на этот вопрос уже есть ответ, но вот другой способ.
просто создайте другой объект, определите его как Serializable
и дайте ему переменную списка и отправьте ее с помощью putExtra
на intent
такой:
public class Category implements Serializable {
private List<YourObject> objects;
public Category() {
}
public List<YourObject> getObjects() {
return objects;
}
public void setObjects(List<YourObject> objects) {
this.objects = objects;
}
а затем для отправки этого:
Category cat = new Category();
cat.setObjects(objects);
intent.putExtra("listOfObjects",cat);
startActivity(intent);
и чтобы получить созданный вами объект, сделайте следующее:
Category cat = (Category) extras.get("listOfObjects");
cat.getObjects;