无法使用自定义控件更改Viewpager和片段

发布于 2022-09-11 17:02:08 字数 5759 浏览 32 评论 0

我尝试使用自定义控件进行页面的切换.

我看的是这个教程:组合控件

现在我用了一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文