【问题标题】:Passing data to One Activity to Fragment将数据传递给一个 Activity 到 Fragment
【发布时间】:2017-03-16 11:21:32
【问题描述】:

很抱歉问了重复的问题,但在检查了其他问题后,我使用了他们的答案他们在我的代码中不起作用我是 android 新手

这是我要传递数据的类

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder>   {


    private int[] mdataset;
    private String[] mplanet;

    Context c;
    public MainAdapter(Context context ,int[] dataset , String[] planet){

        this.c = context;
        this.mplanet = planet;
        this.mdataset = dataset;

    }

    @Override
    public void onBindViewHolder(MainAdapter.ViewHolder holder, final int position ) {
        holder.image.setImageResource(mdataset[position]);
        holder.textView.setText(mplanet[position]);

        holder.image.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {


      //   here is my i want to pass the data position to another fragment** 


                Bundle bundle = new Bundle();
                bundle.putInt("position", position);
                bottomActivity fragment = new bottomActivity();
                fragment.setArguments(bundle);

            }
        });
    }

    @Override
    public int getItemCount() {
        return mdataset.length;
    }




    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView image;
        TextView textView;

        public ViewHolder(View itemView) {
            super(itemView);

            image = (ImageView) itemView.findViewById(R.id.imageView);
            textView  = (TextView)itemView.findViewById(R.id.textView);

        }
    }


    @Override
    public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {


           View  v = LayoutInflater.from(parent.getContext())
                   .inflate(R.layout.single_row, null);

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

}

这是我的Fragment 类,我想在哪里接收数据

public class bottomActivity extends Fragment
 {

    TextView textView;
    int pos;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.fragment_bottom, container, false);

        textView = (TextView)view.findViewById(R.id.title_textView);

        textView.setText(pos+"");
        return  view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


//  here is that code where the data should received 

        Bundle bundle = bottomActivity.this.getArguments();

        if (bundle != null) 
        {

            pos = bundle.getInt("position", 2);

        }

    }
}

【问题讨论】:

  • 你没有在onclick中添加或替换fragment,你只是将bundle绑定到fragment
  • 你能详细解释一下吗,我不太了解
  • 告诉我该怎么做

标签: java android android-fragments android-intent


【解决方案1】:
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.fragment_bottom, container, false);

        textView = (TextView)view.findViewById(R.id.title_textView);
        // get data from the bundle you sent
        int position=getArguments().getInt("position");

        textView.setText(position+"");
        return  view;
    }

在你的 onCreatView 片段中这样做

【讨论】:

  • 发布你提交片段的代码并发布你为片段创建视图的代码,我想我会更好地理解你的问题,实际上
  • 你的意思是xml文件
【解决方案2】:

在 Adapter 类的 onClick 方法中使用它

public void onClick(View v) {
    Bundle bundle = new Bundle();
    bundle.putInt("position", position);           
    bottomActivity fragment = new bottomActivity ();
    fragment.setArguments(bundle);
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(CONTENT_VIEW_ID, fragment).commit();
   }

其中 CONTENT_VIEW_ID 是应在您的活动类中定义的容器

然后在bottomActivity片段类中onCreateView

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.fragment_bottom, container,         false);
        Bundle bundle = this.getArguments();
        if (bundle != null) 
        {
            pos = bundle.getInt("position", 2);
        }
        textView = (TextView)view.findViewById(R.id.title_textView);
        textView.setText(pos+"");
        return  view;
    }

【讨论】:

  • 你的意思是我必须实现 View.OnClickListener 并实现 onClick 方法
  • getFragmentManager 错误标记它说“无法解决它”
【解决方案3】:

最好的方法是在片段中使用静态 newInstance 方法,并像参数一样发送您需要的所有数据。下一步是片段中的 onCreate 方法获取您传递的所有数据。

例如

活动

YourFragment fragment = YourFragment.newInstance(10, 4);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(id, fragment).commit();

片段

int data1, data2;
 public static YourFragment newInstance(int data1, int data2) {
    YourFragment fragment = new YourFragment();
    Bundle args = new Bundle();
    args.putInt("data1", data1);
    args.putInt("data2", data2);
    fragment.setArguments(args);
    return fragment;
}


@Override
public void onCreate(Bundle savedInstanceState) {
    data1 = getArguments().getInt("data1", 0);
    data2 = getArguments().getInt("data2", 0);

    super.onCreate(savedInstanceState);
}

我认为您需要这种情况,在创建片段之前发送数据。

干杯:)

【讨论】:

  • 问题是 getFragmentManager 显示错误,如果我使用它无法解决它
  • 你试过 getSupportFragmentManager() 吗?
  • 我可以发一个我的代码链接你能找出问题出在哪里我花了一整天的时间来解决这个问题仍然没有解决它你能尝试解决吗
  • 无法解析方法getFragmentManager()或getFragmentSupportManager()
  • 现在我明白了...您尝试从 RecyclerAdapter 启动 Fragment,但这并不好。因为getSupport/getFragmentManager()存在于Activity中。解决方案是与方法 startFragment() 的接口,您需要在创建 Adapter 的位置(在 Activity 或 Fragment 中)实现该方法。在该实现中,您将代码用于启动片段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多