麻烦从适配器到片段类的传递值?

时间:2017-11-20 05:37:07

标签: android android-fragments fragment

我将值从适配器传递给片段类

这里是适配器类,

 rbFolder.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(selected != null)
                {
                    selected.setChecked(false);
                    String meee =  data.get(position).getTypeId();
                    System.out.println("*******so*inside********"+meee);

                }

                rbFolder.setChecked(true);
               String so =  data.get(position).getTypeId();
                System.out.println("*******so*********"+so);
                selected = rbFolder;
                System.out.println("********selected*******"+selected);
                Fragment homepage = new Fragment();
                FragmentTransaction fragmentManager =((FragmentActivity)context).getSupportFragmentManager()
                        .beginTransaction();
                Bundle bundle=new Bundle();
                bundle.putString("name", so); //key and value
                System.out.println("*****venki***meee*******"+so);

                homepage.setArguments(bundle);
              //  fragmentManager.replace(R.id.content_frame, homepage);
                fragmentManager.addToBackStack(null);
                fragmentManager.commit();
            }
        });

在这里,字符串运作良好,但在我的fragemt类中我没有收到值。我在这个地方遇到麻烦。 这里是Fragmnet类,

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (rootview != null) {
        ViewGroup parent = (ViewGroup) rootview.getParent();
        if (parent != null)
            parent.removeView(rootview);
    }
    try {

        rootview = inflater.inflate(R.layout.homepage, container, false);
    } catch (InflateException e) {
    /* map is already there, just return view as it is */
    }

这里我从适配器获取值,但这不起作用,

   Bundle bundle = ((Activity)context).getIntent().getExtras();
    if (bundle != null)
    {
        String strtext=getArguments().getString("name");
        System.out.println("*******strtext*********"+strtext);

    }

    return rootview;
}

3 个答案:

答案 0 :(得分:1)

首先,您必须将 HomeFragment ()而不是片段称为

Fragment homepage = new HomeFragment();
            FragmentTransaction fragmentManager =((FragmentActivity)context).getSupportFragmentManager()
                    .beginTransaction();
            Bundle bundle=new Bundle();
            bundle.putString("name", so); //key and value
            homepage.setArguments(bundle);
            fragmentManager.replace(R.id.content_frame, homepage);
            fragmentManager.addToBackStack(null);
            fragmentManager.commit();

如果您想在主页片段中获取价值,那么

    if( getArguments() != null)
      String strtext = getArguments().getString("name");

答案 1 :(得分:1)

  •   

    一步一步地进行操作,复制Context上下文;       列出rowItems;       onItemClickListner onItemClickListner;害虫进入适配器    然后复制两个构造方法,然后对项目单击方法进行有害处理以将数据传递给片段。

         

    以这种方式在点击侦听器代码中的片段类集适配器项中...

madapter.setOnClickListener(new MyListAdapterTemp.onItemClickListner() {
             @Override
             public void onClick(String str) {
                 
             }
         });

        Context context;
        List<String> rowItems;
        onItemClickListner onItemClickListner;

  
        public MyListAdapterTemp(Context context, List<String> items) {
            this.context = context;
            this.rowItems = items;

        }

        public void setOnClickListener(onItemClickListner onItemClickListner) {
            this.onItemClickListner = onItemClickListner;

        }

 
    holder.txtDesc.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    onItemClickListner.onClick(rowItems.get(position).toString().trim().toUpperCase());
                          
                }
            });

  •   

    此方法在我的应用程序上可以正常工作,对于活动进行分段,对于活动进行分段,我们可以使用接口传递数据,但不能   这是执行此类操作的最佳方法。

答案 2 :(得分:0)

Fragment homepage = new Fragment();

这应该是你的Fragment班级名称 -

Fragment homepage = new MyFragment();

你的片段就像​​ -

public class MyFragment extends Fragment {
    @Override
    public void onCreate(...) {
         Bundle b = getArguments(); //To get extras from Fragment
    }
}

除此之外,

Bundle bundle = ((Activity)context).getIntent().getExtras();

这用于Activity。对于Fragment,您必须使用getArguments()