繁体   English   中英

Android将值从片段传递到适配器类

[英]Android Pass Value from Fragment to Adapter Class

当用户单击每个行项目中的溢出图像时,我有下面的代码显示弹出菜单。 不幸的是,我不知道如何将上下文传递给导致onClick()未能获取上下文值的片段。 如果我直接在适配器类的getView()中创建侦听器,则设法显示了弹出菜单,但是如果将侦听器传递给片段,则无法获得预期的结果。 我可以知道下面如何修改我的代码吗?

我当前的编码如下:

public class SubProductCustomAdapter extends BaseAdapter {
 ...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //RecyclerView (Android 5.0) - To avoid app crash when there are too many records when user scroll
    ViewHolder viewHolder;
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    //First Created
    if(convertView == null )
    {
        convertView = mInflater.inflate(R.layout.item_sub_product, null);
        viewHolder = new ViewHolder();

        viewHolder.sub_product_name = (TextView)convertView.findViewById(R.id.txt_pdt_name);
        viewHolder.popup_menu = (ImageView) convertView.findViewById(R.id.product_overflow);

        SubRowProducts subRowPro = subRowProducts.get(position);
        viewHolder.sub_product_name.setText(subRowPro.getSub_product_name());

        //Managed to display popup menu using below method
        /*viewHolder.popup_menu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PopupMenu popupMenu = new PopupMenu(context,v);

                popupMenu.getMenuInflater().inflate(R.menu.drawermenu, popupMenu.getMenu());

                popupMenu.show();
            }
        });*/

        //Not managed to display popup menu using below method
        viewHolder.popup_menu.setOnClickListener(new MySubProductListFragment());

        //Store object inside convert view
        convertView.setTag(viewHolder);

    }

    else{
        //Reused or recycle the convertView
        viewHolder = (ViewHolder)convertView.getTag();
    }

    //viewHolder.sub_product_name.setText(subRowProducts.get(position).getSub_product_name());

    return convertView;
}

************************************************************************************************************

public class MySubProductListFragment extends ListFragment implements View.OnClickListener {

...

 @Override
public void onClick(View v) {

    PopupMenu popupMenu = new PopupMenu(getActivity(),v);

    popupMenu.getMenuInflater().inflate(R.menu.drawermenu, popupMenu.getMenu());

    popupMenu.show();

}

}

  1. 使用必需的方法在适配器类中定义一个接口。
  2. 有一个适配器构造函数,期望该接口的引用
  3. 现在,让ListFragment类实现适配器的接口,并在为适配器类创建引用时将this作为参数传递给适配器类构造函数。
  4. 来自适配器类的构造函数具有片段的私有引用,并调用所需的任何方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM