Android 将listView信息从一个活动传递到另一个活动的多个意图
我正在尝试将信息从第二个活动传递到第一个活动。在我的第二个活动中,包含加拿大各省图像的列表视图。列表中的每个项目都包含3个属性(省名称、省首府、省实际标志的图像id)。当用户从listView中选择一个项目时,它应该将他们引导到第一个活动,并将意图信息从第二个活动传递到第一个活动。将要传递的信息是省名和省会。我觉得我做得很正确,我的应用程序目前没有bug或崩溃的问题,但我似乎不明白为什么信息没有从活动2传递到活动1。它什么也没有通过。感谢那些帮助我的人 Main Activity.JavaAndroid 将listView信息从一个活动传递到另一个活动的多个意图,android,Android,我正在尝试将信息从第二个活动传递到第一个活动。在我的第二个活动中,包含加拿大各省图像的列表视图。列表中的每个项目都包含3个属性(省名称、省首府、省实际标志的图像id)。当用户从listView中选择一个项目时,它应该将他们引导到第一个活动,并将意图信息从第二个活动传递到第一个活动。将要传递的信息是省名和省会。我觉得我做得很正确,我的应用程序目前没有bug或崩溃的问题,但我似乎不明白为什么信息没有从活动2传递到活动1。它什么也没有通过。感谢那些帮助我的人 Main Activity.Java
TextView provinceTxt, capitalTxt;
String provinceString, capitalString;
ArrayList<Province> provinces;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
provinceTxt = findViewById(R.id.txtProvince);
capitalTxt = findViewById(R.id.txtCapital);
display();
}
public void selectProvince(View view) {
showAlertDialog();
}
public void showAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Would You Like to Open the Second Activity?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(MainActivity.this, Second_Activity.class);
startActivity(intent);
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
public void display(){
Intent intent = getIntent();
provinceString = intent.getStringExtra("name");
provinceTxt.setText(provinceString);
capitalString = intent.getStringExtra("capital");
capitalTxt.setText(capitalString);
}
}
List<Province> provinces;
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second_);
provinces = ProvincesData.getList();
listView = findViewById(R.id.listView);
CustomAdapter adapter = new CustomAdapter(Second_Activity.this, R.layout.list_view_row, provinces);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Province province = (Province) listView.getItemAtPosition(position);
Intent intent = new Intent();
intent.putExtra("name", province.getName());
intent.putExtra("capital", province.getCapital());
finish();
}
});
}
}
ProvincesData.Java
public static List<Province> getList() {
List<Province> provinces = new ArrayList<Province>();
Province province1 = new Province("Alberta","Edmonton", R.drawable.alberta);
provinces.add(province1);
Province province2 = new Province("British Columbia","Victoria", R.drawable.british_columbia);
provinces.add(province2);
Province province3 = new Province("Manitoba","Winnipeg", R.drawable.manitoba);
provinces.add(province3);
Province province4 = new Province("New Brunswick","Fredericton", R.drawable.new_brunswick);
provinces.add(province4);
Province province5 = new Province("Newfoundland and Labrador","St. John's", R.drawable.newfoundland_and_labrador);
provinces.add(province5);
Province province6 = new Province("Nova Scotia","Halifax", R.drawable.nova_scotia);
provinces.add(province6);
Province province7 = new Province("Ontario","Toronto", R.drawable.ontario);
provinces.add(province7);
Province province8 = new Province("Quebec","Quebec City", R.drawable.quebec);
provinces.add(province8);
Province province9 = new Province("Saskatchewan","Regina", R.drawable.saskatchewan);
provinces.add(province9);
Province province10 = new Province("Prince Edward ","Charlottetown", R.drawable.prince_edward_island);
provinces.add(province10);
return provinces;
}
}
公共静态列表getList(){
列表省份=新建ArrayList();
省1=新省(“艾伯塔省”、“埃德蒙顿省”,R.drawable.Alberta);
省。增加(省1);
省2=新省(“不列颠哥伦比亚省”、“维多利亚省”,R.drawable.不列颠哥伦比亚省);
省。增加(省2);
省3=新省(“马尼托巴省”、“温尼伯省”,R.drawable.Manitoba);
省。增加(省3);
省4=新省(“新不伦瑞克省”、“弗雷德里克顿省”,R.drawable.new_Brunswick);
省。增加(省4);
省5=新省(“纽芬兰和拉布拉多”,“圣约翰”,R.drawable.纽芬兰和拉布拉多);
省。增加(省5);
省6=新省(“新斯科舍省”、“哈利法克斯省”,R.drawable.Nova_Scotia);
省。增加(省6);
省7=新省(“安大略省”,“多伦多”,R.drawable.安大略省);
省。增加(省7);
省8=新省(“魁北克”,“魁北克市”,R.dravable.魁北克);
省。增加(省8);
省9=新省(“萨斯喀彻温省”、“里贾纳省”,R.drawable.萨斯喀彻温省);
省。增加(省9);
省10=新省(“爱德华王子”、“夏洛特镇”,R.drawable.爱德华王子岛);
省。增加(省10);
返回省份;
}
}
Java
public class CustomAdapter extends ArrayAdapter {
static class ViewHolder{
TextView provinceTv;
TextView cityTv;
ImageView armID;
}
List<Province> provinces;
public CustomAdapter(@NonNull Context context, int resource, @NonNull List objects) {
super(context, resource, objects);
provinces = objects;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder holder;
View view = convertView;
if(view == null){
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.list_view_row , null);
holder = new ViewHolder();
holder.provinceTv = view.findViewById(R.id.txtProvinceRow);
holder.cityTv = view.findViewById(R.id.txtCapitalRow);
holder.armID = view.findViewById(R.id.imageView);
view.setTag(holder);
}
holder = (ViewHolder)view.getTag();
holder.provinceTv.setText(provinces.get(position).getName());
holder.cityTv.setText(provinces.get(position).getCapital());
holder.armID.setBackgroundResource(provinces.get(position).getArmID());
return view;
}
}
公共类CustomAdapter扩展了ArrayAdapter{
静态类视窗夹{
TextView provinceTv;
TextView城市电视台;
图像视图武装;
}
列出省份;
公共CustomAdapter(@NonNull上下文,int资源,@NonNull列表对象){
超级(上下文、资源、对象);
省份=对象;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
视窗座;
视图=转换视图;
如果(视图==null){
LayoutInflater充气器=(LayoutInflater)getContext().getSystemService(Context.LAYOUT\u充气器\u SERVICE);
视图=充气机。充气(R.layout.list\u view\u row,空);
holder=新的ViewHolder();
holder.provinceTv=view.findViewById(R.id.txtProvvinceRow);
holder.cityTv=view.findViewById(R.id.txtCapitalRow);
holder.armID=view.findviewbyd(R.id.imageView);
视图.设置标签(支架);
}
holder=(ViewHolder)view.getTag();
holder.provinceTv.setText(provinces.get(position.getName());
holder.cityTv.setText(provides.get(position.getCapital());
holder.armID.setBackgroundResource(provides.get(position.getArmID());
返回视图;
}
}
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/txtTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:text="Selected Province Info"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="25dp"
android:orientation="horizontal">
<TextView
android:id="@+id/txtProvinceTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Province Name"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold" />
<TextView
android:id="@+id/txtProvince"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="text"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="25dp"
android:orientation="horizontal">
<TextView
android:id="@+id/txtCapitalTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Capital City"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"/>
<TextView
android:id="@+id/txtCapital"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="text"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>
<Button
android:id="@+id/btnSelect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="30dp"
android:text="Select Province"
android:onClick="selectProvince"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"/>
</LinearLayout>
Activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Second_Activity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
list_view_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginHorizontal="10dp"
android:layout_weight="1"
tools:srcCompat="@tools:sample/avatars" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:layout_weight="2"
android:layout_marginHorizontal="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/txtProvinceRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"
android:text="" />
<TextView
android:id="@+id/txtCapitalRow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:text="" />
</LinearLayout>
</LinearLayout>
您忘记启动意图
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Province province = (Province) listView.getItemAtPosition(position);
Intent intent = new Intent(this.Second_Activity.class, MainActivity);
intent.putExtra("name", province.getName());
intent.putExtra("capital", province.getCapital());
startActivity(intent);
finish();
}
});
public void display(){
Bundle extras = intent.getExtras();
if(extras != null){
String provinceString = extras.getString("name");
provinceTxt.setText(provinceString);
String capitalString = extras.getString("capital");
capitalTxt.setText(capitalString);
}
}
有关更多详细信息,请参阅
您可以使用Activity.startActivityForResult(意图-意图,int-requestCode)
启动第二个活动,并使用Activity.onActivityResult(int-requestCode,int-resultCode,意图数据)
要从main活动中的第二个活动
接收数据
您确实应该使用startActivityForResult()
,请参见此处:
public void display(){
Bundle extras = intent.getExtras();
if(extras != null){
String provinceString = extras.getString("name");
provinceTxt.setText(provinceString);
String capitalString = extras.getString("capital");
capitalTxt.setText(capitalString);
}
}