Java 通过接口空引用发送数据。安卓工作室

Java 通过接口空引用发送数据。安卓工作室,java,android,android-fragments,Java,Android,Android Fragments,碎片 public class page2_saved_notes extends Fragment { public static final String SAVE = "MyPrefsArrays"; private String mTitleArray = "titlesArray"; private String mNotesArray = "notesArray"; ArrayList<String>

碎片

    public class page2_saved_notes extends Fragment {
        public static final String SAVE = "MyPrefsArrays";
        private String mTitleArray = "titlesArray";
        private String mNotesArray = "notesArray";

        ArrayList<String> arrayListTitle = new ArrayList<>();
        ArrayList<String> arrayListNotes = new ArrayList<>();
        communicateCheckboxes cc;
        String json;
        Gson gson;
        Type type;
        String jsonNotes;
        Type typeNotes;
        SharedPreferences settings;

    //update
        private Listener listener;
        public interface Listener {
            void sendData(String title, String Notes);
        }


        public page2_saved_notes() {
        }

        public static page2_saved_notes newInstance() {
            page2_saved_notes fragment = new page2_saved_notes();
            Bundle args = new Bundle();
            fragment.setArguments(args);
            return fragment;
        }

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

            //interface / preferences / gson initialize
   //update
            listener = (Listener) getActivity();
            settings = getActivity().getSharedPreferences(SAVE, Context.MODE_PRIVATE);
            gson = new Gson();

            //retrieve title from memory
            json = settings.getString(mTitleArray, null);
            type = new TypeToken<ArrayList<String>>() {
            }.getType();
            arrayListTitle = gson.fromJson(json, type);

            //retrieve notes from memory
            jsonNotes = settings.getString(mNotesArray, null);
            typeNotes = new TypeToken<ArrayList<String>>() {
            }.getType();
            arrayListNotes = gson.fromJson(jsonNotes, typeNotes);


      //update
                if(listener!= null)
                listener.sendData("check","check");

            return rootView;
        }
在我发送数据之前,视图似乎还没有在片段内部初始化

如何使用保存的数据从片段调用
sendData
,以重新创建复选框

答复: 谢谢你帮助Moshe Edri。这就是我错的地方

我需要初始化片段内部的布局,然后在main中创建一个新方法(基本上是复制和粘贴,除了为方法添加LinearLayout参数/新名称)来传递数据+布局

碎片

1) 我更改了界面:

public interface communicateCheckboxes {
        void sendData2(String title, String Notes, LinearLayout layout);
    }
2) 将布局变量添加到片段并在onCreate()中初始化

3) 通过片段中的onCreate()发送数据

 for (int i = 0; i < arrayListNotes.size(); i++) {
            Log.i("CHECKING",arrayListTitle.get(i));
           if(cc!= null) {
            cc.sendData2(arrayListTitle.get(i), arrayListNotes.get(i),ll);
            }
        }
for(int i=0;i
当您声明一个与片段对话的接口时,您需要这样做:

 public interface Listener {
        void sendData(String title, String Notes);
    }
您不必选择名称,这就像扩展任何对象一样

然后你需要像以前一样实现你的侦听器,但是

创建如下所示的变量:

private Listener listener;`
在你的片段中

public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof Activity) {
        listener = (Listener) context;
    }
}
然后你可以调用你的函数

  if(listener != null){
listener.sendData("title" , "notes");
}

什么样的监听器?因为我在调用方法之前膨胀了片段中的视图。所以我不知道为什么它说它不能调用视图上的方法…
//将数据发送到(int I=0;I
为数组的大小添加了一个减1,这样就不会超出范围。它编译并运行,但不保留数据并重新生成复选框。我得到了以下日志cat错误
java.lang.ClassCastException:com.Myapp.notes.MainActivity无法强制转换为com.Myapp.notes.page2\u saved\u notes$Listener
…duh我没有实现..1秒演示如何以及在何处尝试强制转换,在请求中更新您的代码
private Listener listener;`
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof Activity) {
        listener = (Listener) context;
    }
}
  if(listener != null){
listener.sendData("title" , "notes");
}