【发布时间】:2019-02-06 08:50:18
【问题描述】:
我在 Android 开发中遇到了一些问题。环境设置为在最低 API 23 中运行。
这是我试图实现的目标:
我有一个MainActivity 和一个BottomNavigationView。当单击BottomNavigationView 中的一个项目时,它会启动一个片段。这很好用,我可以将数据发送到片段并有一个界面来与我的活动对话。
问题是:
在我的最后一个片段 (ProgramFragment) 上,我想做一个表单向导。所以,我想从ProgramFragment 启动其他片段。我使用了在MainActivity 中使用的相同方法,我可以在布局中有一个按钮的地方启动第一个片段(RecStartFragment)。我希望在单击按钮时显示下一个片段(RecDataPatientFragment)。单击按钮时出现错误,提示:
java.lang.NullPointerException: Attempt to invoke interface method
'void x.RecStartFragment$OnRecStartFragmentListener.startRecProg()'
on a null object reference at
x.RecStartFragment$1.onClick(RecStartFragment.java:30)
有没有办法做到这一点?为什么从活动而不是片段中起作用?
这里是片段RecStartFragment的代码
package x;
import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class RecStartFragment extends Fragment {
private static final String TAG = RecStartFragment.class.getName();
private View v;
OnRecStartFragmentListener onRecStartFragmentListener;
private Button btnStartRec;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
if(v != null) {
return v;
}
v = inflater.inflate(R.layout.fragment_rec_start, null);
btnStartRec = v.findViewById(R.id.btn_start_rec);
btnStartRec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onRecStartFragmentListener.startRecProg();
}
});
return v;
}
public interface OnRecStartFragmentListener
{
public void startRecProg();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
onRecStartFragmentListener = (OnRecStartFragmentListener) context;
} catch (Exception e)
{
}
}
提前谢谢你!
【问题讨论】:
标签: android android-fragments interface