java - 从另一个布局(ViewPager)获取按钮?

标签 java android android-fragments

我正在开发一个应用程序,要求指定两个 ViewPagers 单独交互。我的问题是,底部的 ViewPager 必须包含在滑动时与 ViewPager 一起移动的按钮。也就是说,我无法获得主要 Activity 中所需的按钮,因为当前 View 的 axml 布局仅包含两个 viewpager,然后以编程方式设置它们。

这是 AXML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <android.support.v4.view.ViewPager
        android:id="@+id/mainViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    <android.support.v4.view.ViewPager
        android:id="@+id/bottomViewPager"
        android:layout_width="match_parent"
        android:layout_height="150dp"
        android:layout_alignParentBottom="true">
        </android.support.v4.view.ViewPager>
</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#998822">
<Button
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:id="@+id/menu_button"
    android:text="Menu"
    android:textSize="12dp" />
</FrameLayout>

下面是我想要捕获按钮的方式:

m_MenuButton = (Button) findViewById(R.id.menu_button);

所以我的问题是:提供点击功能同时保持按钮与 View 分页器的关系(也就是在滑动时滑动)的最佳做法是什么?

最佳答案

我在工作中做过这件事,我所做的是为页面 View 的每个图 block 创建一个单独的 xml,因此将您的按钮移到一个 fragment 中。

然后让第二个 PageViewer 将 fragment 显示为图 block 。

然后是“tile” fragment 的构造函数,您可以将其传递到您想要在按下按钮时从中调用方法的类中。

所以你的基础页面应该是这样的

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<android.support.v4.view.ViewPager
    android:id="@+id/mainViewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
<android.support.v4.view.ViewPager
    android:id="@+id/bottomViewPager"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_alignParentBottom="true">
    </android.support.v4.view.ViewPager>
</RelativeLayout>

然后为 fragment 创建第二个 Xml(这些可以是卡片、web View ,无论您显示的是什么) 看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#998822">
<Button
android:layout_width="75dp"
android:layout_height="75dp"
android:id="@+id/menu_button"
android:text="Menu"
android:textSize="12dp" />

然后创建一个卡片 fragment 并将构造函数更改为

   ...
   // create an instave variable called parent so you can access the other class
 private SomeClassThatHasAMethodYouWantToCall parent;

 static CardFragment newInstance(SomeClassThatHasAMethodYouWantToCall parent) {
        CardFragment cf = new CardFragment();
         this.parent = parent;
        return f;
    }


 // then in onCreateView
   pubklic  View OnCreateView()
{
   View myView = infalter.inflate(containter , R.layout.myCard, false);
   Button b = myView.findViewById(R.id.Mybutton);
   b.setOnClickListener(v -> callMethod()); // shortened for brevity
   return myView;
}

  private void callMethod(){
       parent.callTheMethodYouWantInTheOtherClass();
  }

当你实现你的 pagerAdapter 时,你将不得不覆盖 setPrimar

关于java - 从另一个布局(ViewPager)获取按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360585/

相关文章:

android - onOptionsItemSelected() 在 Fragment 上被调用两次

java - 如何使 drools drl 文件在运行时访问更新的 jar

java - 适用于 Android 的 Google Analytics(分析)如何处理离线应用使用情况?

android - Android React Native 中的多个可扩展 ListView

android - 我可以在选择器中添加图层列表吗

android - 在 fragment 中使用 MaterialViewPager 库时出错

java - 为什么我们不在 getter 中使用 'this'?

java - 如何在Gradle项目中创建单个可执行jar

android - 通知振动,屏幕锁定时的声音

android - RecyclerView 仅显示来自 Firebase 的一项