Java 如何从具有字符串成员arraylist的类填充listview?

Java 如何从具有字符串成员arraylist的类填充listview?,java,android,xml,Java,Android,Xml,我正在创建一个应用程序,其中有一个应用程序活动的列表视图,每个应用程序都有一个点击式侦听器,可以使用应用程序信息打开一个活动 这是应用程序类: public class Application { private String title; private String imageUrl; private ArrayList<String> appVersions; public Application(String title, String

我正在创建一个应用程序,其中有一个应用程序活动的列表视图,每个应用程序都有一个点击式侦听器,可以使用应用程序信息打开一个活动

这是应用程序类:

public class Application {

    private String title;
    private String imageUrl;
    private ArrayList<String> appVersions;


    public Application(String title, String imageUrl, ArrayList<String> appVersions) {
        this.title = imageName;
        this.imageUrl = imageUrl;
        this.appVersions = appVersions;
    }


    public String getTitle() {
        return title;
    }

    public void setTitle(String imageName) {
        this.title = imageName;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }

    public ArrayList<String> getAppVersions() {
        return appVersions;
    }

    public void setAppVersions(ArrayList<String> appVersions) {
        this.appVersions = appVersions;
    }
}
每个应用程序对象都有以下版本:

应用1: 名称:app1 图片:imageUrl 版本:v1.0 v 1.1 v 1.2

画廊布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="100">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="50"
        android:id="@+id/image"
        android:scaleType="centerCrop"
        android:src="@mipmap/ic_launcher_round"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_description"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="Canada"
        android:textColor="#000"/>

    <ListView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="40"
        android:id="@+id/app_versions">

    </ListView>

</LinearLayout>

在应用程序ClickListener中:

ArrayList<String> versionList = adapter.getItem(position).getAppVersions();
当您正在为应用程序版本创建另一个列表时,您的
适配器
需要字符串列表(作为您的数据结构)

更改
ApplicationVersionAdapter

ApplicationVersionAdapter adapter = new ApplicationVersionAdapter(this, R.layout.layout_appversion, versionList);
appVersionsList.setAdapter(adapter);
import java.util.ArrayList;

public class ApplicationVersionAdapter extends ArrayAdapter<String> {

private static final String TAG = "ApplicationVersionAdapt";
private Context mContext;
private int mResource;

public ApplicationVersionAdapter(@NonNull Context context, int resource, @NonNull ArrayList<String> objects) {
    super(context, resource, objects);
    this.mContext = context;
    this.mResource = resource;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    String appVersion = getItem(position);
    // String appVersion = getItem(position).getImageName();
    Log.d("Application version: ", getItem(position));


    LayoutInflater inflater = LayoutInflater.from(mContext);
    convertView = inflater.inflate(mResource, parent, false);
    TextView tvAppVersion = convertView.findViewById(R.id.app_version);
    tvAppVersion.setText(appVersion);

    return convertView;
}
}
import java.util.ArrayList;
公共类应用程序版本适配器扩展了ArrayAdapter{
私有静态最终字符串标记=“ApplicationVersionAdapt”;
私有上下文;
私人国际资源;
公共应用程序版本适配器(@NonNull上下文上下文,int资源,@NonNull ArrayList对象){
超级(上下文、资源、对象);
this.mContext=上下文;
this.mResource=资源;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
字符串appVersion=getItem(位置);
//字符串appVersion=getItem(位置).getImageName();
Log.d(“应用程序版本:”,getItem(位置));
LayoutFlater充气机=LayoutFlater.from(mContext);
convertView=充气机。充气(mResource,父项,false);
TextView tvAppVersion=convertView.findViewById(R.id.app\u版本);
setText(appVersion);
返回视图;
}
}

ApplicationVersionAdapter
中,您将在
getView
中再次列出应用程序,这是错误的。您只需要关心版本的特定应用程序列表

您面临的问题是什么?我可以从主活动填充应用程序列表,但我想在gallery活动中填充应用程序版本列表,当您单击应用程序列表项时,您必须解释问题。到目前为止,您已经做了什么以及您正在尝试做什么。到目前为止,我制作了一个适配器来填充应用程序列表(主活动),并在您单击应用程序列表项时将其名称发送到一个活动,该活动显示有关应用程序的信息(库活动),如应用程序图像、应用程序标题、应用程序版本(字符串数组列表)我想在gallery Activity中填充应用程序版本列表用应用程序版本列表填充另一个列表,就像创建应用程序列表一样。
public class GalleryActivity extends AppCompatActivity {
    private static final String TAG = "GalleryActivity";
    ListView appVersionsList;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);
        appVersionsList = findViewById(R.id.app_versions);
        Log.d(TAG, "onCreate: started.");

        getIncommingIntent();
    }

    private void getIncommingIntent() {
        Log.d(TAG, "getIncommingIntent: checking for the incomming intents");
        if(getIntent().hasExtra("image_url") && getIntent().hasExtra("image_name")) {
            String imageUrl = getIntent().getStringExtra("image_url");
            String imageName = getIntent().getStringExtra("image_name");
            setImage(imageUrl, imageName);
        }
    }

    public void setImage(String imageUrl, String imageName) {
        Log.d(TAG, "setImage: setting the image and name to widgets.");

        TextView name = findViewById(R.id.image_description);
        name.setText(imageName);

        ImageView image = findViewById(R.id.image);
        Glide.with(this)
                .asBitmap()
                .load(imageUrl)
                .into(image);
}
}
ArrayList<String> versionList = adapter.getItem(position).getAppVersions();
ApplicationVersionAdapter adapter = new ApplicationVersionAdapter(this, R.layout.layout_appversion, versionList);
appVersionsList.setAdapter(adapter);
import java.util.ArrayList;

public class ApplicationVersionAdapter extends ArrayAdapter<String> {

private static final String TAG = "ApplicationVersionAdapt";
private Context mContext;
private int mResource;

public ApplicationVersionAdapter(@NonNull Context context, int resource, @NonNull ArrayList<String> objects) {
    super(context, resource, objects);
    this.mContext = context;
    this.mResource = resource;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    String appVersion = getItem(position);
    // String appVersion = getItem(position).getImageName();
    Log.d("Application version: ", getItem(position));


    LayoutInflater inflater = LayoutInflater.from(mContext);
    convertView = inflater.inflate(mResource, parent, false);
    TextView tvAppVersion = convertView.findViewById(R.id.app_version);
    tvAppVersion.setText(appVersion);

    return convertView;
}
}