ViewPager和Fragment onClickListener无法正常工作

时间:2013-03-27 14:50:25

标签: java android onclick android-viewpager onclicklistener

我绝望了。我试图在Fragment类中添加onClickListener。 我的想法是我有ViewPager图片。我想要的只是点击图像本身并让它显示一个祝酒词。我知道您无法向OnClickListener本身注册ViewPager,因此我尝试将其添加到处理Fragment的{​​{1}}类中。 现在发生的是,ImageView方法有效,如果我点击其中一个图像,它会显示一条消息,但它会一直显示我使用的DEFAULT开关盒。我只是为了生活而无法理解为什么......! :( 这是代码,也许你可以看到解决方案?

感谢。

MainActivity:

onClick

这是带有OnClickListener实现的Fragment类:

package com.example.viewpagerexample;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends FragmentActivity{

private static final int NUM_PAGES = 5;

private MyAdapter mAdapter;
private ViewPager mPager;

private Button leftBTN;
private Button rightBTN;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mAdapter = new MyAdapter(getSupportFragmentManager());
    mPager = (ViewPager) findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);


    leftBTN = (Button)findViewById(R.id.leftBTN);
    leftBTN.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mPager.setCurrentItem(mPager.getCurrentItem()-1, true);
        }
    });

    rightBTN = (Button)findViewById(R.id.rightBTN);
    rightBTN.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mPager.setCurrentItem(mPager.getCurrentItem()+1, true);
        }
    });
}

public static class MyAdapter extends FragmentPagerAdapter {

    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }

    @Override
    public Fragment getItem(int position) {
        ImageFragment myFragment = new ImageFragment();
        Bundle data = new Bundle();
        data.putInt("current_page", position);
        myFragment.setArguments(data);
        return myFragment;
    }
}
}

}

1 个答案:

答案 0 :(得分:0)

我认为在你的onclick方法中,v.getId()(点击视图的id)总是返回R.id.imageView1,这就是为什么你总是在onClick中得到默认的开关案例。

你将onClickListener设置为你的imageView,但是你忘了更改imageview的id,所以id仍然是R.id.imageView1而你的监听器无法正确处理它。

尝试编辑onCreateView方法的switch语句,如下所示:

switch (position) {
case 0:
    imageView.setImageResource(R.drawable.splash);
    imageView.setId(R.drawable.splash);
    return view;
case 1:
    imageView.setImageResource(R.drawable.girrafe);
    imageView.setId(R.drawable.girrafe);
    return view;
case 2:
    imageView.setImageResource(R.drawable.lion);
    imageView.setId(R.drawable.lion);
    return view;
case 3:
    imageView.setImageResource(R.drawable.monkey);
    imageView.setId(R.drawable.monkey);
    return view;
case 4:
    imageView.setImageResource(R.drawable.chicken);
    imageView.setId(R.drawable.chicken);
    return view;
default:
    return null;
}