android - 视图寻呼机适配器中的回调更改为空对象
问题描述
在主片段中,我有 viewpager,所以我创建了 view pager 适配器:
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中,我创建了一个回调并为初始化回调创建了一个设置器:
public interface Callback{
void onRowClicked(Object item);
}
public void setCallback(Callback callback) {
this.callback = callback;
}
现在在创建适配器后的主片段中,我以这种方式获得了 fragment1:
Fragment1 fragment1 =
(Fragment1) parkingViewPagerAdapter.getItem(0);
fragment1.setCallback(item -> {
Log.i("", "loggggg: ");
});
在调试模式下,第一个回调变量被初始化,但在 fragmet1 中,当我点击我的项目时,我有一个列表视图:
listAdapter.setListener(item ->{
callback.onRowClicked(item);
}}
callback
一片空白 !!!为什么回调是 null ?如果之前不是 null。
parkViewPagerAdapter.getItem(0) 返回一个新片段?
解决方案
是的,你的假设是正确的。parkViewPagerAdapter.getItem(0) 返回一个新片段。据我所见
@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
方法时都会返回一个新实例。因此,即使您使用 setter 添加回调,每次在 viewpager 中更改页面时,都会创建一个新的片段实例。所以,这就是你获得 NPE 的原因。
推荐阅读
- date - Quarkus GraalVM native image DateTimeFormatter and Localization
- c++ - How can I delete specific rows and columns in a given matrix for C++?
- javascript - 使用javascript(使用pdf.js)将pdf转换为png数组
- javascript - WEBRTC:当我们有音频流时,是否可以控制每个音轨的音量?
- event-handling - Dialogflow Messenger Events Management
- javascript - How to convert complex JavaScript arrays to a combined array and loop to a table?
- javascript - Array of objects, compare with other arrays and filter
- angular - Force angular mat-toolbar and mat-sidenav to take up exactly 100% of the available vertical space
- css - Styling in Reactjs using SCSS
- javascript - Getting the difference in milliseconds between two dates to be used in counter