gpt4 book ai didi

java - 如何通过recyclerview适配器显示字符串数组内容

转载 作者:行者123 更新时间:2023-11-29 23:52:06 25 4
gpt4 key购买 nike

我有这样的 json api 结构:

{
seasons: [
{
seasonstitle: "Season 1",
titles: "S1E1; S1E2; S1E3",
},
{
seasonstitle: "Season 2",
titles: "S2E1; S2E2; S2E3",
},
]
}

我正在尝试显示这两个键的值:seasonstitle 和 titles 但如您所见,titles 键有多个值,所以我像这样解析 json:

解析类:

public final class JsonDetailSeries {

public static ArrayList<SeriesItem> getSimpleMovieStringsFromJson(Context context, String moviesJsonString)
throws JSONException {

final String SEASONS = "seasons";
final String SEASONTITLE = "seasonstitle";
final String TITLES = "titles";

ArrayList<SeriesItem> parsedMovieData = new ArrayList<>();

JSONObject moviesObject = new JSONObject(moviesJsonString);
JSONArray moviesArray = moviesObject.getJSONArray(SEASONS);

for (int i = 0; i < moviesArray.length(); i++) {
String seasontitle;
String titles;

moviesObject = moviesArray.getJSONObject(i);

seasontitle = moviesObject.getString(SEASONTITLE);
titles = moviesObject.getString(TITLES);

String[] titlesArrray = titles.split(Pattern.quote(";"));

for (int j=0; j<titlesArrray.length; j++) {
Log.i("titles ", "=" + titlesArrray[j]);
}

parsedMovieData.add(new SeriesItem(seasontitle, titlesArrray));
}

return parsedMovieData;
}
}

当我在 log cat 中看到它时,它会像这样正确拆分:

titles = S1E1
titles = S1E2
titles = S1E3

依此类推,在我为其返回数据的自定义 arraylist 类中:

public class SeriesItem implements Parcelable {

private String seasontitle;
private String[] titlesArrray;

public SeriesItem(String seasontitle, String[] titlesArrray) {
this.seasontitle = seasontitle;
this.titlesArrray = titlesArrray;
}

@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(seasontitle);
out.writeStringArray(titlesArrray);
}

private SeriesItem(Parcel in) {
this.seasontitle = in.readString();
this.titlesArrray = in.createStringArray();
}

public SeriesItem() {
}

@Override
public int describeContents() {
return 0;
}

public static final Creator<SeriesItem> CREATOR = new Creator<SeriesItem>() {
@Override
public SeriesItem createFromParcel(Parcel in) {
return new SeriesItem(in);
}
@Override
public SeriesItem[] newArray(int i) {
return new SeriesItem[i];
}
};

public String getSeasontitle() {
return seasontitle;
}

public String[] gettitlesArrray() {
return titlesArrray;
}

}

当我调试此类时,titlesArrray 的数据很好地接收到每个标题与另一个分开的标题所以我试图像这样在 recyleview 中显示这些数据:

Season1
S1E1
S1E2
S1E3

Season2
S2E1
S2E2
S2E3

所以这是我的回收 View 适配器:

public class SeriesAdapter extends RecyclerView.Adapter<SeriesAdapter.RecyclerViewHolder> {

ArrayList<SeriesItem> mMoviesItems;
private Context context;
private final SeriesAdapterOnClickHandler mClickHandler;

public interface SeriesAdapterOnClickHandler {
void onClick(SeriesItem movie);
}

public SeriesAdapter(SeriesAdapterOnClickHandler clickHandler) {
mClickHandler = clickHandler;
}

class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public final TextView seasontitle;
public final ListView titlesArray;

public RecyclerViewHolder(View view) {
super(view);
seasontitle = (TextView)itemView.findViewById(R.id.seasontitle);
titlesArray = (ListView) itemView.findViewById(R.id.titlesArray);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
int adapterPosition = getAdapterPosition();
SeriesItem movie = mMoviesItems.get(adapterPosition);
mClickHandler.onClick(movie);
}
}

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
context = viewGroup.getContext();
int layoutIdForListItem = R.layout.series_list_item;
LayoutInflater inflater = LayoutInflater.from(context);
boolean shouldAttachToParentImmediately = false;

View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
return new RecyclerViewHolder(view);
}

@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
holder.seasontitle.setText(String.valueOf(mMoviesItems.get(position).getSeasontitle()));
holder.titlesArray.setText(String.valueOf(mMoviesItems.get(position).gettitlesArrray()));
}

@Override
public int getItemCount() {
if (null == mMoviesItems)
return 0;
else {
return mMoviesItems.size();
}
}

public void setMovieData(ArrayList<SeriesItem> movieData) {
mMoviesItems = movieData;
notifyDataSetChanged();
}
}

我试图包含一个 ListView 来显示此回收 View 中的 titlesArray,但问题出在这一行:

holder.titlesArray.setText(String.valueOf(mMoviesItems.get(position).gettitlesArrray()));

我不能为 ListView 使用 setText 那么如何才能在这个 recycleview 中显示 titlesArray 内容?

最佳答案

I tried to include a listview to display the titlesArray inside this recycleview

不要那样做。

您要做的是处理两种不同的类型,季和剧集。这个问题将帮助您解决这个问题。

How to create RecyclerView with multiple view type?

关于java - 如何通过recyclerview适配器显示字符串数组内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50788749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com