【问题标题】:how to passing data when clicked on item fragment with recyclerview to activity单击带有recyclerview的项目片段时如何将数据传递给活动
【发布时间】: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);
}

}

希望有人能帮助我,谢谢

【问题讨论】:

    标签: android android-fragments android-recyclerview onclicklistener


    【解决方案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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多