无法使用自定义控件更改Viewpager和片段
我尝试使用自定义控件进行页面的切换.
我看的是这个教程:组合控件
现在我用了一个Cardview和LinearLayout,将按钮放在里面,但无法实现。
于是我按照这个教程:
将动态添加页面片段的代码放在了MainActivity.java文件中,
将初始化ImageButtons 放在了MainNavigationView.java文件中,
专门和教程里一样制作了一个ImageButton放在了MainNavigationView.java文件中。
是这个写的逻辑位置不对吗?
我也搜索了一些关于LinerLayout 和Button无响应的一些问题:
尝试将LinerLayout或者ImageButton设置为clickable true/false
:
android LinearLayout嵌套 button、imagebutton时onClickListener不响应的问题
以及添加LinerLayout的属性:android:descendantFocusability="blocksDescendants"
也没有相应:
Android LinearLayout 嵌套 button 监听LinearLayout的onClickListener事件出现问题
这是我的代码:MainNavigationView.xml:
<android.support.v7.widget.CardView
android:id="@+id/mainNavigationView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="500dp"
android:layout_marginBottom="10dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp"
>
<!--ImageView
//i was tring to make the left and right button background other colours.
android:id="@+id/ex1Bg"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/MainWhiteColor"-->
<com.felixxiong.android.example.MainNavigationItem
android:id="@+id/ex1Button"
style="@style/MainButtonStyle"
android:contentDescription="@string/Tapped_Settings"
android:src="@drawable/ex1_btn_selector" />
<!--/ImageView-->
<View
style="@style/viewStyle"/>
<com.felixxiong.android.example.MainNavigationItem
android:id="@+id/ex2Button"
style="@style/MainButtonStyle"
android:contentDescription="@string/Tapped_NowRoute"
android:src="@drawable/ex2_btn_selector" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:padding="10dp"
>
<!--ImageView
android:id="@+id/ex3Bg"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@color/MainWhiteColor"-->
<com.felixxiong.android.example.MainNavigationItem
android:id="@+id/ex3Button"
style="@style/MainButtonStyle"
android:contentDescription="@string/Tapped_Settings"
android:src="@drawable/ex3_btn_selector" />
<!--/ImageView-->
这是我的代码:MainActivity.java:
...
initValue();
ChangeViewPager(); }
private void initValue() {
fragments = new ArrayList<>();
fragments.add(new oneFragment());
fragments.add(new twoFragment());
fragments.add(new threeFragment());
mainFragmentPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager(), fragments);
mViewPager.setAdapter(mainFragmentPagerAdapter);
mViewPager.setCurrentItem(1); //try to set "two fragment" in default }
public void ChangeViewPager() {
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
...
}
这是我的代码:MainNavigationView.java:
public class MainNavigationView extends RelativeLayout {
private MainFragmentPagerAdapter mainFragmentPagerAdapter;
private List<Fragment> fragments;
private ViewPager mViewPager;
private MainNavigationView mMainNavigationView;
private MainNavigationItem ex1Button;
private MainNavigationItem ex2Button;
private MainNavigationItem ex3Button;
public MainNavigationView(Context context) {
super(context);
}
public MainNavigationView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.main_navigation_view, this);
initWidget();
}
private void initWidget() {
mCardView = (CardView) findViewById(R.id.mainCardView);
ex1Button = (MainNavigationItem) findViewById(R.id.settingsButton);
ex2Button = (MainNavigationItem) findViewById(R.id.nowRouteButton);
ex3Button = (MainNavigationItem) findViewById(R.id.planButton);
ex1Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setCurrentItem(0);
}
});
ex2Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setCurrentItem(1);
}
});
ex3Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mViewPager.setCurrentItem(2);
}
});
mViewPager.setOffscreenPageLimit(3);
}
public MenuItem getId(int position) {
return null;
}
}
谢谢~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论