本身自己对于fragment了解的就不太多,当自己半路插进项目组开始继续开发的时候,我发现了viewpager+fragment 而且做这个功能的那哥们儿告诉我说就差点击事件没实现了、、 我当时就菊花一紧,你大爷的,你做不出来的烂摊子让我这个不懂fragment的来收拾 让我情何以堪、、你都倒腾了半年了、心里虽然骂了特一顿,但是作为一个程序素养不错的咱,还是接过来了。
开始尝试:
一拿过代码我看的第一眼,我就又开始想骂了,只是画了个UI,连数据接口都没封装,这叫做的差不多了? 哎,原来显示的数据都是直接写在布局里的,服了。看重点,找到viewpager中的fragment,看了几个回调方法,看不大懂,找找文档,了解了下基本意思,开始真正尝试做监听、
直接在fragment中提取控件的同时对其进行了监听,没效果? 不是吧? 然后开始从各个方面找解答,有的人说是要写到viewPagerAdapter里面进行监听,有的人说要换成View,还有的说要、、 总之找了好多办法,通通试过,就是监听不到。
到群里讨论的时候,大家都说怎么可能,我把代码也贴上去了,基本都会所没有错,往往这种时候是最让人伤心欲绝的了,没有错,就是不能点!
怎么办? 各种debug,各种跟踪,就是不走点击,后来我单独写了个测试Demo,可以点击呀!!!
拓展视野:
僵持了一天多,这样不是办法呀、这还能一直耗着不成,先去联调接口去;过程中满脑子都是这个问题,百思不得其解;突然间想到了,程序中有手势滑动事件,会不会是焦点被劫持了! 好,抱着这个念头,回头把所有的尝试的代码全都给注释掉,就用fragment做测试! 我就不信了。把事件传递的回调函数的返回值全都返回TRUE,这样事件不就可以一直传递了吗、 将代码整理了下,果然可以点击了,我内心那个激动啊!!!
好了,探究过程代码如下:
1.单独抽出viewpager+fragment的Demo实现
主activity:
package com.k24.wheel;
import java.util.ArrayList;
import com.k24.wheel.adapter.MyViewPagerAdapter;
import com.k24.wheel.fragment.TestFragments;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
public class TestViewPagerActivity extends FragmentActivity {
private ViewPager viewPager;
private ArrayList<Fragment> fragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_viewpager_ll);
viewPager = (ViewPager) findViewById(R.id.my_viewpager);
TestFragments fragmentItem;
fragments = new ArrayList<Fragment>();
for(int i = 0; i < 5; i++) {
fragmentItem = new TestFragments(this, i, new String[]{"title"+(i+1), "contents"+(i+1)});
fragments.add(fragmentItem);
}
MyViewPagerAdapter myPagerAdapter = new MyViewPagerAdapter(getSupportFragmentManager(), fragments);
viewPager.setAdapter(myPagerAdapter);
viewPager.setCurrentItem(0);
}
}
Adapter:
package com.k24.wheel.adapter;
import java.util.ArrayList;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class MyViewPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> fragments;
public MyViewPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmen