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");
}