android - 如何在 fragment 中实现 ImageView 的 OnClickListener?

标签 android android-fragments

Can anyone kindly help me implement the opening of a new activity upon clicking of an ImageView. I have a code snippet displayed below.

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 Listening
    ImageView image = (ImageView) findViewById(R.id.image);
    image.setOnClickListener(this);


}
public void onClick(View v) {

    // Launching new Activity on hitting the image
    Intent j = new Intent(getApplicationContext(), Activity2.class);
    startActivity(j);
    // End intent
}

}

Ok I have a code with three tabs, the following controls my tabs which is working right.

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) {

}

}

I have another class pager

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;
}

}

Finally the interested raw class TabFan, now where exactly should that listener be implemented. I have tried the class Fans but apparently am getting some crush, TabFan seem not to work with the events too. Any help please.

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
}

}

最佳答案

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

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

public class TabFan extends Fragment implements View.OnClickListener {

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

@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
    }
}

关于android - 如何在 fragment 中实现 ImageView 的 OnClickListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37380798/

相关文章:

android - 无法创建或构建项目 : Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'

android - 如何将嵌套的 LinearLayout 对齐到顶部

android - 根据行为在不同的 fragment 上使用相同的工具栏折叠工具栏布局

android - fragment 中的 onActivityResult 未称为 childFragment

java - Android:切换按钮打开:显示 fragment 关闭:隐藏 fragment

android - 检测双击 ViewFlipper

android - SwipeListView 前端点击bug 2.3 android

android - 类型 类型不匹配 : cannot convert from RegisterFragment to Fragment

java - 从 Android 应用程序对象显示对话框(或需要可用于多个 Activity 的例程)

java - 当我切换到包含 fragment 的 Activity 时应用程序崩溃(二进制 XML 文件行 #10 : Binary XML file line #10: Error inflating class fragment)