视图寻呼机适配器中的回调更改为空对象
Callback in view pager adapter change to null object
在主要片段中,我有 viewpager,所以我创建了视图寻呼机适配器:
public class ParkingViewPagerAdapter extends FragmentPagerAdapter {
private String cookie;
private final String taskInfoString;
public ParkingViewPagerAdapter(FragmentManager fm,String cookie, String taskInfoString) {
super(fm);
this.cookie = cookie;
this.taskInfoString = taskInfoString;
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
在片段 1 中,我创建了一个回调并为初始化回调创建了一个 setter:
public interface Callback{
void onRowClicked(Object item);
}
public void setCallback(Callback callback) {
this.callback = callback;
}
现在在创建适配器后的主片段中,我以这种方式获得了片段 1:
Fragment1 fragment1 =
(Fragment1) parkingViewPagerAdapter.getItem(0);
fragment1.setCallback(item -> {
Log.i("", "loggggg: ");
});
在调试模式下,第一个回调变量被初始化,但在 fragmet1 中,当我点击我的项目时,我有一个列表视图:
listAdapter.setListener(item ->{
callback.onRowClicked(item);
}}
callback
为空!!!为什么callback为null?如果之前不为null。
parkingViewPagerAdapter.getItem(0) return 一个新片段?
是的,你的假设是正确的。 parkingViewPagerAdapter.getItem(0) return 是一个新片段。据我所知
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
你每次调用 getItem
方法时都会 return 一个新实例。因此,即使您使用 setter 添加回调,每次在 viewpager 中更改页面时,都会创建一个新的片段实例。所以,这就是你获得 NPE 的原因。
在主要片段中,我有 viewpager,所以我创建了视图寻呼机适配器:
public class ParkingViewPagerAdapter extends FragmentPagerAdapter {
private String cookie;
private final String taskInfoString;
public ParkingViewPagerAdapter(FragmentManager fm,String cookie, String taskInfoString) {
super(fm);
this.cookie = cookie;
this.taskInfoString = taskInfoString;
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
在片段 1 中,我创建了一个回调并为初始化回调创建了一个 setter:
public interface Callback{
void onRowClicked(Object item);
}
public void setCallback(Callback callback) {
this.callback = callback;
}
现在在创建适配器后的主片段中,我以这种方式获得了片段 1:
Fragment1 fragment1 =
(Fragment1) parkingViewPagerAdapter.getItem(0);
fragment1.setCallback(item -> {
Log.i("", "loggggg: ");
});
在调试模式下,第一个回调变量被初始化,但在 fragmet1 中,当我点击我的项目时,我有一个列表视图:
listAdapter.setListener(item ->{
callback.onRowClicked(item);
}}
callback
为空!!!为什么callback为null?如果之前不为null。
parkingViewPagerAdapter.getItem(0) return 一个新片段?
是的,你的假设是正确的。 parkingViewPagerAdapter.getItem(0) return 是一个新片段。据我所知
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
你每次调用 getItem
方法时都会 return 一个新实例。因此,即使您使用 setter 添加回调,每次在 viewpager 中更改页面时,都会创建一个新的片段实例。所以,这就是你获得 NPE 的原因。