我想使用Activity
将数据从DialogFragment
传递到interface
。使用类似下面的代码将数据从Adapter
传递到Fragment
时,我已经成功
但是,当我将数据从java.lang.NullPointerException
传递到Activity
DialogFragment
我有一个活动
public class TheLoaiActivity extends AppCompatActivity {
RecyclerView recyclerView, recyclerView1;
AdapterTruyen adapterTruyen;
List<modelTruyen> listTruyen;
List<modelKinds> listKinds;
LinearLayout lnTheloai;
private OnClickIntent mListener;
int id;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.kinds_layout);
addControl();
id = getIntent().getIntExtra(AdapterKinds.KEY_INTENT_DATA_KINDS,0);
Toast.makeText(this, ""+id, Toast.LENGTH_SHORT).show();
loadData();
loadView(id);
addEvents();
}
private void addEvents() {
final FragmentManager fragmentManager = getFragmentManager();
final TheLoaiDialogFragment dialogFragment = new TheLoaiDialogFragment();
lnTheloai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onClick(listKinds); //ERROR at here
dialogFragment.show(fragmentManager,"list_kind");
}
});
}
public interface OnClickIntent {
void onClick(List<modelKinds> list);
}
// set the listener. Must be called from the fragment
public void setListener(OnClickIntent listener) {
this.mListener = listener;
}
和DialogFragment
public class TheLoaiDialogFragment extends DialogFragment {
RecyclerView recyclerView;
AdapterKinds adapterKinds;
List<modelKinds> listKinds;
TextView txtCancel;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.kinds_fragment_layout,container,false);
recyclerView = view.findViewById(R.id.rv_diaglogFragmentKinds);
txtCancel = view.findViewById(R.id.txt_camcelKindsFragment);
TheLoaiActivity theLoaiActivity = new TheLoaiActivity();
theLoaiActivity.setListener(new TheLoaiActivity.OnClickIntent() {
@Override
public void onClick(List<modelKinds> list) {
Log.d(TAG, "onClick: "+ list.size());
}
});
当我将数据从Activity
传递到DiaglogFragment
时,我遇到了问题
FATAL EXCEPTION: main
Process: com.abba.story, PID: 18048
java.lang.NullPointerException: Attempt to invoke interface method 'void com.abba.kinds.TheLoaiActivity$OnClickIntent.onClick(java.util.List)' on a null object reference
我该怎么办? 您能为我解释这个错误吗?
答案 0 :(得分:0)
在片段中,替换:
TheLoaiActivity theLoaiActivity = new TheLoaiActivity();
具有:
TheLoaiActivity theLoaiActivity=(TheLoaiActivity)getActivity();
答案 1 :(得分:0)
要获取对Fragment内父活动的引用,您需要在 onActivityCreated 方法内进行调用。在此之前,例如在 onCreateView 中,Activity不存在,这就是为什么您会得到null指针异常的原因。另外,您正在创建一个新活动,而该活动没有引用包含该片段的现有活动
类似这样的东西:
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
TheLoaiActivity theLoaiActivity = (TheLoaiActivity)getActivity();
}
答案 2 :(得分:0)
尝试此操作肯定可以
private void addEvents() {
final FragmentManager fragmentManager = getFragmentManager();
final TheLoaiDialogFragment dialogFragment = new TheLoaiDialogFragment();
lnTheloai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ERROR at here
dialogFragment.show(fragmentManager,"list_kind");
}
});
}
public interface OnClickIntent {
void onClick(List<modelKinds> list);
}
// set the listener. Must be called from the fragment
public void setListener(OnClickIntent listener) {
this.mListener = listener;
if(mListener !=null){
mListener.onClick(listKinds);
}
}