如何在片段中实现ImageView的OnClickListener?

时间:2016-05-22 23:49:03

标签: android android-fragments

  

任何人都可以帮助我在点击ImageView时实现新活动的开启。我有一个显示在下面的代码段。

public class Fans extends AppCompatActivity implements TabLayout.OnTabSelectedListener{

//This is our tablayout
private TabLayout tabLayout;

//This is our viewPager
private ViewPager viewPager;
ImageView image;

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

    //Adding toolbar to the activity
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //Initializing the tablayout
    tabLayout = (TabLayout) findViewById(R.id.tabLayout);

    //Adding the tabs using addTab() method
    tabLayout.addTab(tabLayout.newTab().setText("Fans"));
    tabLayout.addTab(tabLayout.newTab().setText("Jersey"));
    tabLayout.addTab(tabLayout.newTab().setText("Team"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    //Initializing viewPager
    viewPager = (ViewPager) findViewById(R.id.pager);

    //Creating our pager adapter
    Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount());

    //Adding adapter to pager
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });



}

@Override
public void onTabSelected(TabLayout.Tab tab) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}

}

  

好的我有一个带有三个标签的代码,以下控制我的标签,它们正常工作。

public class Pager extends FragmentStatePagerAdapter {

//integer to count number of tabs
int tabCount;

//Constructor to the class
public Pager(FragmentManager fm, int tabCount) {
    super(fm);
    //Initializing tab count
    this.tabCount= tabCount;
}

//Overriding method getItem
@Override
public Fragment getItem(int position) {
    //Returning the current tabs
    switch (position) {
        case 0:
            TabFan tab1 = new TabFan();
            return tab1;
        case 1:
            TabJersey tab2 = new TabJersey();
            return tab2;
        case 2:
            TabTeam tab3 = new TabTeam();
            return tab3;
        default:
            return null;
    }
}

//Overriden method getCount to get the number of tabs
@Override
public int getCount() {
    return tabCount;
}

}

  

我有另一个班级寻呼机

public class TabFan extends Fragment {

//Overriden method onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    //Returning the layout file after inflating
    //Change R.layout.tab1 in you classes
    return inflater.inflate(R.layout.tab_fan, container, false);

    // Onclick Listener
}

}

  

最后感兴趣的原始类TabFan,现在应该在哪个应该实现该侦听器。我已经尝试了类粉丝,但显然我有点迷恋,TabFan似乎也没有与事件合作。请帮忙。

{{1}}

}

3 个答案:

答案 0 :(得分:2)

如果单击 Ctrl + Space 键,Android Studio将显示建议窗口并为您生成覆盖onClick等方法。

image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent j = new Intent(getActivity(), Activity2.class);
            startActivity(j);
        }
    });

无论您身在何处,都在FragmentActivityImageView只需要View.OnClickListener。用于检测点击事件覆盖onClick方法。

另外一点,如果您需要context片段使用getActivity()getActivity().getApplicationContext()

答案 1 :(得分:2)

使用您提供的代码,您需要做两件事才能将image对象正确链接到您编写的onClick()方法。

首先,Fragment类需要实现View.OnClickListener接口。这是onClick(View v)在使用setOnClickListener(this)时实际激活点击的原因。将您的类声明行替换为:

public class TabFan extends Fragment implements View.OnClickListener {

其次,如果您要使用TabFansetOnClickListener(this)添加任何可点击的对象,则onClick(View v)需要验证它是否正在处理预期的视图:

@Override
public void onClick(View v) {
    if (v.getId() == R.id.image) {
        // Launching new Activity on hitting the image
        Intent j = new Intent(getActivity().getApplicationContext(), Activity2.class);
        startActivity(j);
        // End intent
    }
}

答案 2 :(得分:1)

我喜欢做的是在XML中设置onClick:

 <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="yourMethod"
        android:src="@drawable/yourpicture"/>

然后在你的Fragment或Activity中实现你的方法来打开新的Activity:

public void yourMethod(View v) {
    Intent intent = new Intent(this, ToOpenAcitivy.class);
    startActivity(intent);
}

同样this site在学习这样的东西时帮助了我很多。