Android 将listView信息从一个活动传递到另一个活动的多个意图

Android 将listView信息从一个活动传递到另一个活动的多个意图,android,Android,我正在尝试将信息从第二个活动传递到第一个活动。在我的第二个活动中,包含加拿大各省图像的列表视图。列表中的每个项目都包含3个属性(省名称、省首府、省实际标志的图像id)。当用户从listView中选择一个项目时,它应该将他们引导到第一个活动,并将意图信息从第二个活动传递到第一个活动。将要传递的信息是省名和省会。我觉得我做得很正确,我的应用程序目前没有bug或崩溃的问题,但我似乎不明白为什么信息没有从活动2传递到活动1。它什么也没有通过。感谢那些帮助我的人 Main Activity.Java

我正在尝试将信息从第二个活动传递到第一个活动。在我的第二个活动中,包含加拿大各省图像的列表视图。列表中的每个项目都包含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);
      }


    }