当我的viewpager检测到任何滑动时,我正在尝试让我的活动调用我的片段。
这是我的活动代码。
public interface SwipeListener {
void swipe();
}
private SwipeListener mSwipeListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalog);
ButterKnife.bind(this);
setSupportActionBar(mToolbar);
int startingFragmentPosition = 0;
mSwipeListener = (SwipeListener) this;
ClothingSectionsPagerAdapter sectionsPagerAdapter =
new ClothingSectionsPagerAdapter(getSupportFragmentManager());
sectionsPagerAdapter.setContext(this);
mViewPager.setAdapter(sectionsPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
mViewPager.setCurrentItem(startingFragmentPosition);
mViewPager.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
mSwipeListener.swipe();
return false;
}
});
}在我的片段中,我实现了这个接口并覆盖了这个方法。然而,当我运行应用程序时。它崩溃了,说明它不能在onCreate方法中将this转换为SwipeListener。我该如何解决这个问题?
发布于 2017-12-29 16:57:35
这是因为您正在尝试将您的活动设置为SwipeListener。您的片段应该实现此接口,然后将此片段作为SwipeListener。
我认为最好将片段列表传递给您的ClothingSectionsPageAdapter (在您的activity中创建它们),这样您就可以有一个引用,或者使用创建片段列表的相同方法来创建SwipeListener。
发布于 2017-12-29 16:59:22
这不是它的工作方式。您必须将回调注册到publisher组件(在本例中为Activity)。如果您想要将卷帘操作传递给片段表单活动。您应该在片段中实现SwipeListener,并将其设置为Activity。下面是一个例子。
public class MainActivity extends AppCompatActivity {
private List<SwipeListener> listeners = new ArrayList<>();
public void addSwipeListener(SwipeListener listener) {
listeners.add(listener);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new);
mViewPager.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
for (SwipeListener listener : listeners) {
listener.swipe();
}
return false;
}
});
}}
和示例片段。
class FragmentA extends Fragment implements SwipeListener{
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
((MainActivity)getActivity()).addSwipeListener(this);
super.onActivityCreated(savedInstanceState);
}
@Override
public void swipe() {
// here you will get callback
}
}我已经做了一个回调列表,这样你就可以管理多个片段,根据你的需要进行修改。并且不要忘记在fragmnent的分离时删除侦听器。
https://stackoverflow.com/questions/48019854
复制相似问题