代码之家  ›  专栏  ›  技术社区  ›  user3566841

如何使用片段中的按钮启动活动?

  •  0
  • user3566841  · 技术社区  · 10 年前

    我有一个片段,它有一个浮动的动作按钮,我想在按下时启动一个活动。下面是我要从中启动的片段的代码:

    package com.nhscoding.safe2tell;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    
    public class LEARN extends Fragment {
    
    
        View rootview;
    
        private OnFragmentInteractionListener mListener;
    
    
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            rootview = inflater.inflate(R.layout.fragment_learn, container, false);
            return rootview;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
            subTip.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
                    startActivityForResult(intent,0);
                }
            });
        }
    
        public void onButtonPressed(Uri uri) {
            if (mListener != null) {
                mListener.onFragmentInteraction(uri);
            }
        }
    
        @Override
        public void onDetach() {
            super.onDetach();
            mListener = null;
        }
    
        public static LEARN newInstance() {
            LEARN fragment = new LEARN();
            Bundle args = new Bundle();
            fragment.setArguments(args);
    
            return fragment;
    
    
        }
        public interface OnFragmentInteractionListener {
            // TODO: Update argument type and name
            public void onFragmentInteraction(Uri uri);
        }
    
    
    
    //public class Stuff extends Activity {
    //    Button submit_tip = (Button) findViewById(R.id.submit_tip);
    //    submit_tip.setOnClickListener(new View.OnClickListener() {
    //        public void onClick(View v) {
    //            Intent intent = new Intent(v.getContext(), SUBMIT_TIP.class);
    //            startActivityForResult(intent,0);
    //        }
    }
    

    这会在findViewById上返回错误,因为它不能在片段中使用,只能在活动中使用。我是否需要将此更改为活动,或者是否有其他方法来完成此操作?

    3 回复  |  直到 10 年前
        1
  •  1
  •   Yash Sampat    10 年前

    获取对 View onCreate() a的方法 Fragment 不会起作用,因为 碎片 的布局尚未膨胀。

    你只需要更换

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        final Button subTip = (Button) getActivity().findViewById(R.id.subTip);
        subTip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
                startActivityForResult(intent,0);
            }
        });
    }
    

    有了这个:

    @Override
    public void onViewCreated (View view, Bundle savedInstanceState){
    
        final FloatingActionButton subTip = (FloatingActionButton) view.findViewById(R.id.subTip);
        subTip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (v.getContext(),SUBMIT_TIP.class);
                startActivityForResult(intent,0);
            }
        });
    }
    

    试试这个。这会奏效的。

        2
  •  0
  •   ρяσѕρєя K    10 年前

    使用 rootview 用于从片段布局访问按钮:

        final Button subTip = (Button) rootview.findViewById(R.id.subTip);
    

    注: getActivity() 返回当前Fragment所在的主Activity上下文,因此如果调用 rootview.findViewById 表示我们正在从“活动”布局而不是“片段”访问视图

        3
  •  0
  •   amir    10 年前

    你可以用这个。您可以通过以下方式获取当前活动 getActivity .

    @Override
    public void onViewCreated (View rootView, Bundle savedInstanceState){
    final Button b= (Button) rootView.findViewById(R.id.b);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent (v.getContext(),yourActivity.class);
            startActivityForResult(intent,0);
        }
    }
    
    );
    }