单击带有recyclerview的项目片段时如何将数据传递给活动
Posted
技术标签:
【中文标题】单击带有recyclerview的项目片段时如何将数据传递给活动【英文标题】:how to passing data when clicked on item fragment with recyclerview to activity 【发布时间】:2021-01-12 09:59:52 【问题描述】:我有一个关于将点击的卡片视图数据传递给活动的问题 当用户点击item时,它会打开PlayerActivity.class,并改变Details布局标题,urlimage,点击item的标题,描述也一样。 这是我的文件:
myadapter.java
public class NettvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
private final List<item_kenh> recyclerViewItems;
private final Context mContext;
Tab1_Fragment fragmenttab1;
public NettvAdapter(Context context, List<item_kenh> recyclerViewItems,Tab1_Fragment fragmenttab1)
this.mContext = context;
this.recyclerViewItems = recyclerViewItems;
this.fragmenttab1 = fragmenttab1;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_kenh, null);
return new MenuItemViewHolder(itemLayoutView);
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position)
MenuItemViewHolder menuItemHolder = (MenuItemViewHolder) holder;
final item_kenh fp = (item_kenh) recyclerViewItems.get(position);
//menuItemHolder.titles.setText(fp.getTitle());
// menuItemHolder.profile.setText(fp.getProfiles());
String url = fp.getUrl_images();
Picasso.get().load(url).into(menuItemHolder.thumb);
menuItemHolder.thumb.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
fragmenttab1.clikcData(fp.getUrl_images());
);
// menuItemHolder.titles.setOnClickListener(new View.OnClickListener()
// @Override
// public void onClick(final View v)
// fragmentone.clikcData(fp.getTitle());
//
//);
@Override
public int getItemCount()
return recyclerViewItems.size();
public class MenuItemViewHolder extends RecyclerView.ViewHolder
// public TextView titles;
public ImageView thumb;
// public TextView profile;
// public LinearLayout lineLayout;
MenuItemViewHolder(View itemLayoutView)
super(itemLayoutView);
// titles = (TextView) itemLayoutView.findViewById(R.id.title);
thumb = (ImageView) itemLayoutView.findViewById(R.id.imageView);
//profile = (TextView) itemLayoutView.findViewById(R.id.profiles);
//lineLayout = (LinearLayout) itemLayoutView.findViewById(R.id.midlelayout);
tab_1.java(片段)
public class Tab1_Fragment extends Fragment
public static final String TAG = "MYTAG";
RequestQueue QUEUE;
String URLHTTP;
private List<item_kenh> mRecyclerViewItems = new ArrayList<>();
private RecyclerView.Adapter mAdapter;
RecyclerView rv;
public static Tab1_Fragment getInstance()
Tab1_Fragment fragmenttab1 = new Tab1_Fragment();
return fragmenttab1;
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
public Tab1_Fragment()
// Required empty public constructor
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
final View rootView = inflater.inflate(R.layout.fragment_tab1,container,false);
rv = (RecyclerView)rootView.findViewById(R.id.rv_tab1);
rv.setHasFixedSize(true);
rv.setLayoutManager(new LinearLayoutManager(getContext()));
rv.setLayoutManager(new GridLayoutManager(getContext(), 3));
mAdapter = new NettvAdapter(getContext(),mRecyclerViewItems,this);
QUEUE = Volley.newRequestQueue(getContext());
URLHTTP = getResources().getString(R.string.urlserver);
httpGET(URLHTTP);
mRecyclerViewItems.clear();
return rootView;
public void httpGET(String url)
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>()
@Override
public void onResponse(String response)
parsingData(response);
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
try
String responseBody = new String(error.networkResponse.data,"utf-8");
Log.d(TAG,"ERROR "+responseBody);
catch (UnsupportedEncodingException errorr)
Log.d(TAG,errorr.toString());
);
QUEUE.add(stringRequest);
public void parsingData(String jsonData)
try
JSONObject obj = new JSONObject(jsonData);
JSONArray m_jArry = obj.getJSONArray("data");
for (int i = 0; i < m_jArry.length(); i++)
JSONObject jo_inside = m_jArry.getJSONObject(i);
String url_img = jo_inside.getString("url_img");
item_kenh stationItem = new item_kenh(url_img);
mRecyclerViewItems.add(stationItem);
rv.setAdapter(mAdapter);
catch (JSONException e)
e.printStackTrace();
public void clikcData(String datatitle)
Intent int_detail = new Intent(getContext(), PlayerActivity.class);
int_detail.putExtra("url_img", position);
getActivity().startActivity(int_detail);
PlayerActivity.java
public class PlayerActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
ImageView imageView = findViewById(R.id.image);
Intent intent = getIntent();
String imageUrl = intent.getStringExtra("url_img");
Picasso.get().load(imageUrl).fit().centerInside().into(imageView);
希望有人能帮助我,谢谢
【问题讨论】:
【参考方案1】:首先在下面的任何地方创建一个新接口(ClickListener.java):
interface ClickListener
void onClickData(String value);
然后将它作为构造函数参数添加到Adapter中。
另外在Adapter中也不需要Context参数(至少我没有找到任何上下文需求。)
但是,如果您需要 onBindViewHolder 中的上下文,您应该使用holder.itemView.getContext()
public class NettvAdapter extends RecyclerView.Adapter<NettvAdapter.MenuItemViewHolder>
private final List<item_kenh> recyclerViewItems;
private listener ClickListener;
public NettvAdapter(List<item_kenh> recyclerViewItems, ClickListener listener)
this.recyclerViewItems = recyclerViewItems;
this.listener = listener;
@Override
public NettvAdapter.MenuItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
View itemLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_kenh, null);
return new MenuItemViewHolder(itemLayoutView);
@Override
public void onBindViewHolder(NettvAdapter.MenuItemViewHolder holder, final int position)
final item_kenh fp = (item_kenh) recyclerViewItems.get(holder.getAdapterPosition());
//menuItemHolder.titles.setText(fp.getTitle());
// menuItemHolder.profile.setText(fp.getProfiles());
String url = fp.getUrl_images();
Picasso.get().load(url).into(holder.thumb);
holder.thumb.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
listener.onClickData(fp.getUrl_images());
);
@Override
public int getItemCount()
return recyclerViewItems.size();
public class MenuItemViewHolder extends RecyclerView.ViewHolder
// public TextView titles;
public ImageView thumb;
// public TextView profile;
// public LinearLayout lineLayout;
MenuItemViewHolder(View itemLayoutView)
super(itemLayoutView);
// titles = (TextView) itemLayoutView.findViewById(R.id.title);
thumb = (ImageView) itemLayoutView.findViewById(R.id.imageView);
//profile = (TextView) itemLayoutView.findViewById(R.id.profiles);
//lineLayout = (LinearLayout) itemLayoutView.findViewById(R.id.midlelayout);
然后在你的 Fragment 中实现ClickListener
:
Tab1_Fragment extends Fragment implements ClickListener
@Override
void onClickData(String clickedValue)
Intent int_detail = new Intent(getContext(), PlayerActivity.class);
int_detail.putExtra("url_img", clickedValue);
getActivity().startActivity(int_detail);
并像以前一样初始化您的适配器:
mAdapter = new NettvAdapter(mRecyclerViewItems, this);
【讨论】:
以上是关于单击带有recyclerview的项目片段时如何将数据传递给活动的主要内容,如果未能解决你的问题,请参考以下文章
从片段中获取意图值后,我如何在 recyclerview 项目中实现单击
在使用 FirebaseRecyclerPagingAdapter 时,第二次单击 RecyclerView 中的项目时,片段显示为空