簡體   English   中英

Android:通過ViewPager從一個片段滾動到另一個片段

[英]Android: Scrolling from one Fragment to another through a ViewPager

我已經實現了一個ViewPager,它將多個Fragment連接在一起,以釋放出您可能已經知道的“滾動視圖”體驗。 無論如何,我在第一個片段上有一個按鈕,需要將用戶滾動到第二個片段。 我該如何做到這一點呢? 這是我的代碼:

ViewPager XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>
</LinearLayout>

片段1:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#3498db" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:layout_gravity="left"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="25dp"
                android:text="Step 1"
                android:textColor="#ffffff"
                android:textSize="50dp" />

                <Button
                android:id="@+id/step1Btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:layout_gravity="center"
                android:layout_marginBottom="5sp"
                android:background="@drawable/buttonshape"
                android:shadowColor="#A8A8A8"
                android:shadowDx="0"
                android:shadowDy="0"
                android:shadowRadius="5"
                android:text="Next Step"
                android:textColor="#FFFFFF"
                android:textSize="30sp" />
        </LinearLayout>
    </RelativeLayout>

為了簡短起見,假設第二個片段具有相同的XML。

因此,我們有兩個片段。 這是片段Java類:

public class RegisterPageOne extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View v = inflater.inflate(R.layout.registration_page1, container, false);

        Button nextStep = (Button) v.findViewById(R.id.step1Btn);
        nextStep.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                //Where I want to call the SECOND FRAG
            }
        });

        return v;
    }


    public static RegisterPageOne newInstance(String text) {

        RegisterPageOne f = new RegisterPageOne();
        Bundle b = new Bundle();
        b.putString("msg", text);

        f.setArguments(b);

        return f;
    }
}  

請幫助我:)

您可以使用viewPager對象的setCurrentItem(int item,boolean smoothScroll)方法來實現此目的。 是文檔。

在您的片段中看到了有關如何引用ViewPager的后續問題。 對於像我這樣的相對新手來說,這非常令人費解,但是,我想我可以得到所有這些……我會告訴你我在代碼中所做的事情。 在ViewPager中設置一個偵聽器:

公共類PageViewActivity擴展FragmentActivity實現PageDisplayPortFrag.OnLinkExpectedListener {...}

這在您的片段中引用:

private OnLinkExpectedListener mListenerLink;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        mListenerLink = (OnLinkExpectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnLinkExpectedListener");
    }
}

@Override
public void onDetach() {
    mListenerLink = null;
    super.onDetach();
}

// THIS IS THE METHOD CALLED BY THE BUTTON CLICK !!!
public void linkExpected(String ticker) {
    if (mListenerLink != null) {
        mListenerLink.onLinkActivity(ticker);
    }
}

public interface OnLinkExpectedListener {

    public void onLinkActivity(String ticker);
}

然后,在ViewPager中調用一個方法:

@Override
public void onLinkActivity(String ticker) {
    // receive ticker from port click; user wants to view page in webview, for this security

    //Toast.makeText(this, "Ticker item clicked: " + ticker, Toast.LENGTH_SHORT).show();

    // NEHARA, YOU MAY OR MAY NOT NEED TO DO STUFF HERE
    // THIS IS WHAT I NEEDED TO DO; LEAVING IT FOR THE 
    // getFragmentTag() EXAMPLE -- WHICH CAME FROM Stack Overflow POSTERS
    // get all-important fragment tag
    String frag_Tag = getFragmentTag(pager.getId(),1);
    // use tag to get the webview fragment
    PageXYZWebviewFrag xyzWeb = (PageXYZWebviewFrag)
            getSupportFragmentManager().findFragmentByTag(frag_Tag);
    // send request to the webview fragment
    xyzWeb.loadPageForSelectedSecurity(ticker);

    // SET THE DESIRED FRAGMENT, assumes I know the fragment number
    // from when I set up the ViewPager
    // switch to the webview fragment
    pager.setCurrentItem(1);
}

// fragment tag getter -- very important, yet has been elusive
private String getFragmentTag(int viewPagerId, int fragmentPosition) {
    return "android:switcher:" + viewPagerId + ":" + fragmentPosition;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM