我正在制作鸡尾酒安卓应用。
我搜索一个鸡尾酒的名字,然后收到我使用的API中所有鸡尾酒的列表视图。我在列表视图中单击项目(鸡尾酒),然后在新活动(称为CocktailDisplay)中显示鸡尾酒(名称,缩略图,成分等)的信息。我通过intent传递了SearchCocktail活动中的鸡尾酒名称。从那里,我只是在CocktailDisplay中显示该文本。
我想首先展示鸡尾酒的图像和名称。
我遇到了麻烦,新的帮助,访问模型以获取缩略图所需的信息以及最终的成分和其他信息。
我是Android开发的新手,所以我不确定我是否走在正确的道路上。
提前致谢!这是我的代码。
SearchActivity.java(将数据传递给CocktailDisplay.java的部分)
ListView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
DrinkRecipeModel value = (DrinkRecipeModel) ListView1.getItemAtPosition(position);
// selected item
String cocktail = value.getDrinkName();
Intent myIntent = new Intent(getApplicationContext(), CocktailDisplay.class);
// sending data to new activity
myIntent.putExtra("selected-item", cocktail);
startActivity(myIntent);
}
});
DrinkRecipeModel.java
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class DrinkRecipeModel {
@SerializedName("idDrink")
private int drinkId;
@SerializedName("strDrink")
private String drinkName;
@SerializedName("categories")
private String drinkCategories;
@SerializedName("strDrinkThumb")
private String drinkThumb;
@SerializedName("ingredients")
private ArrayList<String> ingredients;
public int getDrinkId() {
return drinkId;
}
public String getDrinkName(){
return drinkName;
}
public String getDrinkCategories(){
return drinkCategories;
}
public String getDrinkThumb(){
return drinkThumb;
}
public ArrayList<String> getIngredients() { return ingredients; }
public void setDrinkId(int drinkId) { this.drinkId = drinkId; }
public void setDrinkName(String drinkName) { this.drinkName = drinkName; }
public void setDrinkCategories(String drinkCategories) {
this.drinkCategories = drinkCategories;
}
public void setDrinkThumb(String drinkThumb) {
this.drinkThumb = drinkThumb;
}
public void setIngredients(ArrayList<String> ingredients) {
this.ingredients = ingredients;
}
}
activity_cocktail_display.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".CocktailDisplayActivity" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cocktailImage"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:maxHeight="80dp"
android:maxWidth="80dp"
android:minHeight="10dp"
android:minWidth="10dp" />
<TextView
android:id="@+id/cocktailName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cocktailImage"
android:textStyle="bold"
android:layout_centerInParent="true" />
</RelativeLayout>
CocktailDisplay.java
public class CocktailDisplay extends Activity {
TextView cocktailName;
ImageView cocktailImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cocktail_display);
cocktailName = (TextView) findViewById(R.id.cocktailName);
cocktailImage = (ImageView) findViewById(R.id.cocktailImage);
// get the intent from which this activity is called.
Intent intent = getIntent();
// ***** Trying to access model data here...not happy *****
DrinkRecipeModel recipe = *not sure how to call*;
// fetch value from key-value pair and make it visible on TextView.
String item = intent.getStringExtra("selected-item");
cocktailName.setText(item);
// fetch value from key-value pair and make it visible on ImageView.
// ***** Trying to access thumbnail here...not happy *****
cocktailImage.setImageResource(recipe.getDrinkId());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cocktail_display, menu);
return true;
}
}
答案 0 :(得分:0)
一个选项可能是让您的自定义类实现Serializable接口,然后您可以使用Intent#putExtra()方法的putExtra(Serializable ..)变体在intent中传递对象实例。try this link
答案 1 :(得分:0)
使用这个精彩的网站= http://www.parcelabler.com/
在那里,粘贴你的'模型类'代码,在输出中你会得到这样的东西 -
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
public class DrinkRecipeModel implements Parcelable {
@SerializedName("idDrink")
private int drinkId;
@SerializedName("strDrink")
private String drinkName;
@SerializedName("categories")
private String drinkCategories;
@SerializedName("strDrinkThumb")
private String drinkThumb;
@SerializedName("ingredients")
private ArrayList<String> ingredients;
public int getDrinkId() {
return drinkId;
}
public String getDrinkName(){
return drinkName;
}
public String getDrinkCategories(){
return drinkCategories;
}
public String getDrinkThumb(){
return drinkThumb;
}
public ArrayList<String> getIngredients() { return ingredients; }
public void setDrinkId(int drinkId) { this.drinkId = drinkId; }
public void setDrinkName(String drinkName) { this.drinkName = drinkName; }
public void setDrinkCategories(String drinkCategories) {
this.drinkCategories = drinkCategories;
}
public void setDrinkThumb(String drinkThumb) {
this.drinkThumb = drinkThumb;
}
public void setIngredients(ArrayList<String> ingredients) {
this.ingredients = ingredients;
}
protected DrinkRecipeModel(Parcel in) {
drinkId = in.readInt();
drinkName = in.readString();
drinkCategories = in.readString();
drinkThumb = in.readString();
if (in.readByte() == 0x01) {
ingredients = new ArrayList<String>();
in.readList(ingredients, String.class.getClassLoader());
} else {
ingredients = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(drinkId);
dest.writeString(drinkName);
dest.writeString(drinkCategories);
dest.writeString(drinkThumb);
if (ingredients == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(ingredients);
}
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<DrinkRecipeModel> CREATOR = new Parcelable.Creator<DrinkRecipeModel>() {
@Override
public DrinkRecipeModel createFromParcel(Parcel in) {
return new DrinkRecipeModel(in);
}
@Override
public DrinkRecipeModel[] newArray(int size) {
return new DrinkRecipeModel[size];
}
};
现在用上面的代码替换你的模型类'代码,你的模型类不是'parcelable'。 因此,您现在可以使用 -
myIntent.putExtra("receipe_item", drinkReceipeOBjectWhichIsParcelableNow);
您可以在下一个活动中重新开始展示。