android-如何使现有片段实现活动';谁是听众?

android-如何使现有片段实现活动';谁是听众?,android,android-fragments,android-activity,interface,listener,Android,Android Fragments,Android Activity,Interface,Listener,我从一个片段->活动开始。在活动中,我创建了一个接口,当用户单击按钮时,我将字符串传递给接口对象,创建并调用finish()。在片段中,我实现了该接口,并希望获得该字符串。但是在活动中,我得到一个崩溃,说侦听器是空的 public class SampleActivity extends AppCompatActivity { private Button button; private MatchActivity.OnMatchCompleteListener onMatch

我从一个片段->活动开始。在活动中,我创建了一个接口,当用户单击按钮时,我将字符串传递给接口对象,创建并调用finish()。在片段中,我实现了该接口,并希望获得该字符串。但是在活动中,我得到一个崩溃,说侦听器是空的

public class SampleActivity  extends AppCompatActivity
{
    private Button button;
    private MatchActivity.OnMatchCompleteListener onMatchCompleteListener;
    public interface OnMatchCompleteListener
    {
        public void matchComplete(String matchID);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.someButton); 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onMatchCompleteListener.matchComplete("finished");
                finish();
            }
        });
    }
}
碎片

public class SampleFragment extends Fragment implements SampleActivity.OnMatchCompleteListener{

    private View rootView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_login , container, false);
        return rootView;
    }

    @Override
    public void matchComplete(String matchID) {
        Log.d("TEST",matchID);
    }
}

如果您在
R.layout.activity\u main
中有您的片段,并且您的片段id是
R.id.fragment
请使用以下命令:

onMatchCompleteListener =
 ((SampleFragment)getFragmentManager().findFragmentById(R.id.fragment))
否则,请使用此解决方案:

SampleFragment fragment = new SampleFragment();
onMatchCompleteListener = fragment;
getFragmentManager().beginTransaction().add(R.layout.activity_main, fragment, "TAG_SIMPLE").commit();

该片段不在ActivityAddSecondSolutiontoActivity的onCreate()方法中