Fragment傳值到Activity

weixin_34232744發表於2018-04-10

採用介面回撥機制

在Fragment中定義介面

public  interface FragmentListener{
        void onFragment(Object object);
    }

當Fragment被載入到Activity的時候會被回撥,判斷宿主Activity是否實現了介面。

@Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if(context instanceof FragmentListener)
        {
            mFragmentListener = (FragmentListener)context;
        }
        else{
            throw new IllegalArgumentException("Activity must implements FragmentListener");
        }

    }

傳值操作,通過介面回撥

mFragmentListener.onFragment("資料來自Fragment");

Activity實現介面回撥方法,並重寫回撥方法。

@Override
 public void onFragment(Object object){
 
       button.setText(object.toString());
    }

示例:

在Fragment中

public class RightFragment extends Fragment {
private FragmentListener mFragmentListener;
    private String name;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
        View  view =inflater.inflate(R.layout.avtivity_time,container,false);
        TextView textView = (TextView)view.findViewById(R.id.time_text);
        if (getArguments() != null) {
           name = getArguments().getString("MainActivity");
        }
        textView.setText(name);
        mFragmentListener.onFragment("資料來自Fragment");
        return view;
    }

    public  interface FragmentListener{
        void onFragment(Object object);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if(context instanceof FragmentListener)
        {
            mFragmentListener = (FragmentListener)context;
        }
        else{
            throw new IllegalArgumentException("Activity must implements FragmentListener");
        }

    }
    
}

在Activity中

public class MainActivity extends AppCompatActivity implements RightFragment.FragmentListener {
private Button button;
    private RightFragment rightFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button_1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                rightFragment = new RightFragment();
                Bundle args = new Bundle();
                args.putString("MainActivity","Hello");
//                setArguments方法必須在fragment建立以後
                rightFragment.setArguments(args);
                addFragment(rightFragment);

            }
        });
    }

    private void addFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.fragment_contain,fragment);
        transaction.commit();
    }
    @Override
        public  void onFragment(Object object){
            button.setText(object.toString());
    }
}

相關文章