我在通过接口传递数据时遇到问题

时间:2018-08-31 10:12:24

标签: java android

我想使用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

我该怎么办? 您能为我解释这个错误吗?

3 个答案:

答案 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);
}

}
相关问题