Java 每个recycleview项目中的可单击字符串数组项目

Java 每个recycleview项目中的可单击字符串数组项目,java,android,Java,Android,我有一个API,其中包含如下数据: {"seasons":[ { "id":"1", "titles":"1title1;1title2;1title3", "url":"1url1;1url2;1url3;" }, { "id":"2", "titles":"2title1;2title2;2title3", "url":"2url1;2url2;2url3;" } ]} 1title1 1title2 1title3 2title1 2title2 2title3 @Override

我有一个API,其中包含如下数据:

{"seasons":[
{
"id":"1",
"titles":"1title1;1title2;1title3",
"url":"1url1;1url2;1url3;"
},
{
"id":"2",
"titles":"2title1;2title2;2title3",
"url":"2url1;2url2;2url3;"
}
]}
1title1
1title2
1title3
2title1
2title2
2title3
@Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
        holder.title.setText(String.valueOf(mMoviesItems.get(position).getFullTitles()));
        holder.title.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                 // Toast here
            }
        }
    }
我很好地解析了它,在parcelable类中,我为标题做了如下操作:

public String getTitles() {
        return titles;
    }

    public StringBuilder getFullTitles() {

        StringBuilder builder = new StringBuilder();
        String[] titlesArray = getTitles().split(";");
        for (String title : titlesArray) {
            builder.append(title + "\n");
        }
这是一个url:

public String getUrlAdaptive() {
        return urladaptive;
    }

    public StringBuilder getFullUrlAdaptiveFinal() {

        StringBuilder builder2 = new StringBuilder();
        String[] urlArray = getUrlAdaptive().split(";");
        for (String details : urlArray) {
            builder2.append(details + "\n");
        }
        return builder2;
    }
因此,在我的recycleview适配器中,我在textview中获取如下标题数据:

@Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
        holder.title.setText(String.valueOf(mMoviesItems.get(position).getFullTitles()));    
    }
我在我的recycleview应用程序中得到的结果如下:

{"seasons":[
{
"id":"1",
"titles":"1title1;1title2;1title3",
"url":"1url1;1url2;1url3;"
},
{
"id":"2",
"titles":"2title1;2title2;2title3",
"url":"2url1;2url2;2url3;"
}
]}
1title1
1title2
1title3
2title1
2title2
2title3
@Override
    public void onBindViewHolder(RecyclerViewHolder holder, int position) {
        holder.title.setText(String.valueOf(mMoviesItems.get(position).getFullTitles()));
        holder.title.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                 // Toast here
            }
        }
    }
现在您可以看到此组:

1title1
1title2
1title3
2title1
2title2
2title3
请参阅recycleview的第一项 这一组:

1title1
1title2
1title3
2title1
2title2
2title3
请参阅recycleview的第二项

您可以将其与api进行比较以理解我的意思

我需要做的是使每个组的每个项目都适用于被单击

就像当我点击1title1时,我得到了与标题相对应的url,它是1url1,可以在youtube上打开它 当我点击1title2时,我得到了与标题相对应的url,它是1url2,可以在youtube上打开它 当我点击2title2时,我得到了与标题相对应的url,它是2url2,可以在youtube上打开它

等等

这就像在recycleview的每个主要项目中单击项目一样

这是尝试回答后的代码:

@Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
        holder.title.setText(String.valueOf(mMoviesItems.get(position).getFullTitles()));

        holder.title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View vview) {
                // here when click on each title I need to get the getFullUrlAdaptiveFinal with it to play it
            }
        });

    }
这是series_list_item.xml的完整代码:

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

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="14sp"
        android:visibility="visible" />

    <TextView
        android:id="@+id/url"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:textSize="14sp"
        android:visibility="visible" />

</LinearLayout>

适配器代码:

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

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

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

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

    public void setClickListener(SeriesAdapterOnClickHandler callback) {
        mClickHandler = callback;
    }

class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public final TextView SeriesSeasontitle;
    public final TextView urlAdaptive;

    public RecyclerViewHolder(View view) {
        super(view);
        SeriesSeasontitle = (TextView)itemView.findViewById(R.id.title);
        urlAdaptive = (TextView)itemView.findViewById(R.id.url);
        view.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int adapterPosition = getAdapterPosition();
        SeriesItem movie = mMoviesItems.get(adapterPosition);
        String text = "already Added To Favorites";
                Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        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);

        RecyclerViewHolder holder = new RecyclerViewHolder(view);

        return new RecyclerViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
        holder.SeriesSeasontitle.setText(String.valueOf(mMoviesItems.get(position).getFullTitles()));

        holder.SeriesSeasontitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View vview) {
                String text = "text";
                Toast.makeText(context, text, Toast.LENGTH_LONG).show();
            }
        });

    }

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

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

    public void setMovieData(ArrayList<SeriesItem> movieData) {
        mMoviesItems = movieData;
        notifyDataSetChanged();
    }
}
公共类系列适配器扩展了RecyclerView.Adapter{
阵列列表;
私人语境;
私有序列AdapterOnClickHandler-McClickHandler;
公共接口系列AdapterOnClickHandler{
void onClick(系列项目电影);
}
public SeriesAdapter(SeriesAdapterOnClickHandler clickHandler){
mClickHandler=clickHandler;
}
public void setClickListener(serieAdapterOnClickHandler回调){
mClickHandler=回调;
}
类RecyclerViewWholder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公开最终文本视图系列主题;
公共最终文本视图;
公共回收服务文件夹(视图){
超级(视图);
seriesasontitle=(TextView)itemView.findViewById(R.id.title);
urlAdaptive=(TextView)itemView.findViewById(R.id.url);
view.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
int adapterPosition=getAdapterPosition();
serieItem movie=mMoviesItems.get(适配器位置);
String text=“已添加到收藏夹”;
Toast.makeText(上下文、文本、Toast.LENGTH_LONG).show();
mClickHandler.onClick(电影);
}
}
@凌驾
public RecycleServiceWholder onCreateViewHolder(视图组视图组,int-viewType){
context=viewGroup.getContext();
int layoutIdForListItem=R.layout.series\u列表项;
LayoutFlater充气机=LayoutFlater.from(上下文);
布尔值shouldAttachToparentInstallent=false;
视图=充气机。充气(布局用于列表项、视图组,应立即附加到选项);
RecyclerViewWorder支架=新的RecyclerViewWorder(视图);
返回新的RecycleServiceWholder(视图);
}
@凌驾
BindViewHolder上的公共无效(最终RecyclerViewHolder,最终int位置){
holder.SeriesAsontitle.setText(String.valueOf(mMoviesItems.get(position.getFullTitles());
holder.seriesAsontitle.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(查看vview){
String text=“text”;
Toast.makeText(上下文、文本、Toast.LENGTH_LONG).show();
}
});
}
@凌驾
public int getItemCount(){
if(null==mMoviesItems)
返回0;
否则{
返回mMoviesItems.size();
}
}
@凌驾
public int getItemViewType(int位置){
if(null==mMoviesItems)
返回0;
否则{
返回mMoviesItems.size();
}
}
public void setMovieData(ArrayList movieData){
mMoviesItems=电影数据;
notifyDataSetChanged();
}
}
活动代码:

SeriesDetail extends AppCompatActivity implements
        SeriesAdapter.SeriesAdapterOnClickHandler {

    SeriesAdapter mAdapterTrailer;
    RecyclerViewAdapterOthers mAdapterOthers;

    @BindView(R.id.rv_videos)
    RecyclerView mVideosList;

    @BindView(R.id.tv_error_message_display3)
    TextView mErrorMessageDisplay3;

    @BindView(R.id.rv_videos2)
    RecyclerView mTrailersList;
    @BindView(R.id.pb_loading_indicator_trailers2)
    ProgressBar mLoadingIndicatorTrailers2;

    String sortOrder2="seasons/1435";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_series_detail);

        ButterKnife.bind(this);


        LinearLayoutManager LayoutManager2 = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        mTrailersList.setLayoutManager(LayoutManager2);
        mTrailersList.setHasFixedSize(true);
        mAdapterTrailer = new SeriesAdapter(this);
        mTrailersList.setAdapter(mAdapterTrailer);

        loadVideosData(String.valueOf(sortOrder2));

    }


    private void loadVideosData(String movieId) {
        showVideoDataView();
        new FetchVideosTask().execute(movieId);
    }


    @Override
    public void onClick(SeriesItem video) {

    }


    private void showTrailerDataView() {
        mErrorMessageDisplay3.setVisibility(View.INVISIBLE);
        mTrailersList.setVisibility(View.VISIBLE);
    }

    private void showErrorMessage3() {
        mTrailersList.setVisibility(View.INVISIBLE);
        mErrorMessageDisplay3.setVisibility(View.VISIBLE);
    }

    public class FetchVideosTask extends AsyncTask<String, Void, ArrayList<SeriesItem>> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mLoadingIndicatorTrailers2.setVisibility(View.VISIBLE);
        }

        @Override
        protected ArrayList<SeriesItem> doInBackground(String... params) {
            if (params.length == 0) {
                return null;
            }
            String movieId = params[0];
            URL videosRequestUrl = NetworkSeries.buildUrl(movieId);

            try {
                String jsonVideoResponse = NetworkSeries.getResponseFromHttpUrl(videosRequestUrl);

                ArrayList<SeriesItem> simpleJsonVideoData = JsonShashaDetailSeries.getSimpleMovieStringsFromJson(SeriesDetail.this, jsonVideoResponse);

                return simpleJsonVideoData;

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        @Override
        protected void onPostExecute(ArrayList<SeriesItem> videoData) {
            mLoadingIndicatorTrailers2.setVisibility(View.INVISIBLE);
            if (videoData != null) {
                showTrailerDataView();
                mAdapterTrailer.setMovieData(videoData);
            } else {
                showErrorMessage3();
            }
        }
    }


    @Override
    protected void onStart() {
        super.onStart();
    }

}
SeriesDetail扩展了AppCompatActivity实现
SeriesAdapter.SeriesAdapterOnClickHandler{
系列适配器制作的拖车;
RecycleServiceAdapterOthers mAdapterOthers;
@BindView(R.id.rv_视频)
回收视图mVideosList;
@BindView(R.id.tv\u错误消息\u显示3)
TextView mErrorMessageDisplay3;
@BindView(R.id.rv_videos2)
RecyclerView MTRailerList;
@BindView(R.id.pb\装载\指示器\拖车2)
进度条加载指示器轨道2;
字符串sortOrder2=“seasures/1435”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_系列_细节);
把(这个)绑起来;
LinearLayoutManager layoutmanager 2=新的LinearLayoutManager(此,LinearLayoutManager.VERTICAL,false);
mTrailersList.setLayoutManager(LayoutManager2);
mTrailersList.setHasFixedSize(true);
MADAPTERTRAIL=新系列适配器(本);
mtRailerList.setAdapter(madapterTrail);
loadVideosData(String.valueOf(sortOrder2));
}
私有void loadVideosData(字符串电影ID){
showVideoDataView();
新建FetchVideosTask().execute(movieId);
}
@凌驾
公共void onClick(系列项目视频){
}
私有void showTrailerDataView(){
mErrorMessageDisplay3.setVisibility(View.INVISIBLE);
mTrailersList.setVisibility(View.VISIBLE);
}
私有消息3(){
mTrailersList.setVisibility(View.INVISIBLE);
mErrorMessageDisplay3.setVisibility(View.VISIBLE);
}
公共类FetchVideosTask扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
MLLoadingIndicator Railers2.设置可见性(View.VISIBLE);
}
@凌驾
保护阵列