【问题标题】:Callback in view pager adapter change to null object视图寻呼机适配器中的回调更改为空对象
【发布时间】:2019-02-25 19:55:56
【问题描述】:

在主片段中我有 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 中,我创建了一个回调并为初始化回调创建了一个 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) 返回一个新片段?

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    是的,你的假设是正确的。 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 的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多