【问题标题】:Passing data through Fragments通过 Fragments 传递数据
【发布时间】:2018-08-02 09:41:16
【问题描述】:

我的应用很简单,只是我有一个 FragmentA 和 FragmentB 第一个按钮通过第二个片段传递字符串数据(“Hi i'm A”)有文字显示此消息我的问题是

为什么我的“ModifyTxt”方法不起作用?

public class newFragmentA extends Fragment{
    Button button;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.newfragmenta_layout,container,false);
    }

    newFragmentB newfragmentB;
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        button = getActivity().findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                newfragmentB.ModifyTxT("Hi I'm A");
            }
        });


       }
}

这是我的第二个 Fragment(FragmentB)

public class newFragmentB extends Fragment {
    TextView textView;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.newfragmentb_layout,container,false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        textView = getActivity().findViewById(R.id.TV);
    }
    public void ModifyTxT(String string){
        textView.setText(string); }
}

【问题讨论】:

标签: java android android-studio android-fragments fragment


【解决方案1】:

试试这个:

public class FragmentB extends Fragment {
  // ...

  public static FragmentB newInstance() {
        return new FragmentB();
    }
}

在片段A中:

button.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    FragmentB newFragment = FragmentB.newInstance();
    newFragment.modifyTxT("Hi I'm A");
  }
});

注意编码规则:类名首字母大写,方法首字母小写...

【讨论】:

    【解决方案2】:

    更喜欢使用接口与Fragments通信

    public class FragmentA extends Fragment{
        public interface MyCallback{
            void modifyTxT(String text); // method naming convention start with small letter.
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            button = getActivity().findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (newfragmentB instanceof MyCallback) {
                        ((MyCallback)newfragmentB).modifyTxT("Hi I'm A");
                    }
                }
            });
    
    
        }
    
    }
    
    public  class FragmentB extends Fragment implements FragmentA.MyCallback{
    
        public static FragmentB getInstance(){
            return new FragmentB();
    
        }
    
        @Override
        public void modifyTxT() {
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      相关资源
      最近更新 更多