fenix14 2013-07-14 07:14 采纳率: 100%
浏览 15622
已采纳

求指导,谢谢各位大神。 ViewPager和FragmentPagerAdapter实现切换,但是无法显示数据

想做个应用市场,效果如图,下面的是一级标签,用的TabHost跳转Activity实现。然后上面这一排是二级标签,想用TextView + ViewPager + Fragment 实现,现在滑动有效,但是数据加载不出来。求指教,捉急一整天了。
CSDN移动问答CSDN移动问答
这是“推荐”对应的Activity:

public class CommendActivity extends FragmentActivity {
private static final int INDEX_COM = 0;
private static final int INDEX_NEW = 1;
private static final int INDEX_HOT = 2;
private static final int INDEX_GUESS = 3;

private ImageView comPointer; // 指针
private TextView comCom, comNew, comHot, comGuess; // 标签
private ViewPager comPager;
private PagerAdapter pagerAdapter;
private List<CommendFragment> fragments;

private int currentPage = 0; // 当前二级页
private int delta = 0; // 指针单位移动量
private int offset = 0; // 指针移动偏移值

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_commend);

    initPointer();
    initTextView();
    initViewPager();
}

/*
 * 配置标签
 */
private void initTextView() {
    comCom = (TextView) findViewById(R.id.comCom);
    comNew = (TextView) findViewById(R.id.comNew);
    comHot = (TextView) findViewById(R.id.comHot);
    comGuess = (TextView) findViewById(R.id.comGuess);

    comClickListener listener = new comClickListener();
    comCom.setOnClickListener(listener);
    comNew.setOnClickListener(listener);
    comHot.setOnClickListener(listener);
    comGuess.setOnClickListener(listener);
}

/*
 * 配置标签指针
 */
private void initPointer() {
    comPointer = (ImageView) findViewById(R.id.comPointer);
    int imageWidth = BitmapFactory.decodeResource(getResources(), R.drawable.pointer).getWidth();
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    delta = dm.widthPixels / 4;
    offset = (delta - imageWidth) / 2;
    Matrix matrix = new Matrix();
    matrix.postTranslate(offset, 0);
    comPointer.setImageMatrix(matrix);
}

/*
 * 配置ViewPager
 */
private void initViewPager() {
    comPager = (ViewPager) findViewById(R.id.comPager);

    fragments = new ArrayList<CommendFragment>();
    CommendFragment comFragment = CommendFragment.newInstance(INDEX_COM);
    CommendFragment newFragment = CommendFragment.newInstance(INDEX_NEW);
    CommendFragment hotFragment = CommendFragment.newInstance(INDEX_HOT);
    CommendFragment guessFragment = CommendFragment.newInstance(INDEX_GUESS);
    fragments.add(comFragment);
    fragments.add(newFragment);
    fragments.add(hotFragment);
    fragments.add(guessFragment);

    comPager.setAdapter(new TabsAdapter(getSupportFragmentManager(),
            fragments));
    comPager.setCurrentItem(currentPage);
    comPager.setOnPageChangeListener(new ComPageChangeListener());
}

private class comClickListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
        case R.id.comCom:
            comPager.setCurrentItem(INDEX_COM);
            break;
        case R.id.comNew:
            comPager.setCurrentItem(INDEX_NEW);
            break;
        case R.id.comHot:
            comPager.setCurrentItem(INDEX_HOT);
            break;
        case R.id.comGuess:
            comPager.setCurrentItem(INDEX_GUESS);
            break;
        }
    }
}

private class ComPageChangeListener implements OnPageChangeListener {
    @Override
    public void onPageScrollStateChanged(int state) {
    }

    @Override
    public void onPageScrolled(int position, float positionOffset,
            int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
        Toast.makeText(
                CommendActivity.this,
                "this is "
                        + ((TabsAdapter)comPager.getAdapter()).getItem(position), Toast.LENGTH_SHORT)
                .show();
        Animation anim = new TranslateAnimation(delta * currentPage, delta
                * position, 0, 0);

        currentPage = position;
        anim.setFillAfter(true);
        anim.setDuration(300);
        comPointer.startAnimation(anim);
    }
}

}

Adapter的java代码:

public class TabsAdapter extends FragmentPagerAdapter {
private List<CommendFragment> fragments;

public TabsAdapter(FragmentManager fm, List<CommendFragment> list) {
    super(fm);
    this.fragments = list;
}

@Override
public int getCount() {
    return fragments.size();
}

@Override
public boolean isViewFromObject(View view, Object obj) {
    return view == obj;
}

@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}

}

Fragment的java代码:

public class CommendFragment extends Fragment {
private static final int DEFAULT_TAG = -1;
private int tag;
private TextView tv;

/**
 * 添加标识,返回带标识的对象。
 * 
 * @param tag
 *            标识
 * @return 带标识的Fragment
 */
public static CommendFragment newInstance(int tag) {
    CommendFragment fragment = new CommendFragment();
    Bundle b = new Bundle();
    b.putInt("tag", tag);
    fragment.setArguments(b);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle b = getArguments();
    tag = (null == b ? DEFAULT_TAG : b.getInt("tag"));
}

/**
 * 解析布局
 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_com, container, false);
    tv = (TextView) view.findViewById(R.id.empty);
    tv.setText(tv.getText().toString() + tag);

    return view;
}


@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

}

  • 写回答

3条回答 默认 最新

  • u010588886 2014-10-12 10:44
    关注

    @Override
    public boolean isViewFromObject(View view, Object obj) {
    return view == obj;
    }

    把适配器里面的这个方法去掉就可以了,我也是折腾了一天

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?