[英]How to switch from one tab to another tab by clicking on button in Android?
我試圖在Android中編寫代碼,通過單擊一個按鈕從一個選項卡切換到另一個選項卡。
我知道通過單擊選項卡,我們可以從一個選項卡切換到另一個選項卡,但是可以通過單擊一個按鈕從一個選項卡切換到另一個選項卡。
我嘗試了以下教程。
http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/
在本教程中,我以以下方式編輯了MovieFragment.java文件。
MovieFragment.java
package info.androidhive.tabsswipe;
import info.androidhive.tabsswipe.R;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class MoviesFragment extends Fragment {
ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_movies, container, false);
Button btn = (Button) rootView.findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
viewPager.setCurrentItem(0);
}
});
return rootView;
}
}
XML代碼
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#17df0d">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Design Movies Screen"
android:textSize="20dp"
android:layout_centerInParent="true"/>
<Button
android:id="@+id/btn"
android:layout_width="100dp"
android:layout_height="80dp"
android:text="Click"
/>
我在xml布局中創建了一個按鈕,並嘗試切換到選項卡-1,但我收到了空指針異常。
錯誤:
05-20 09:07:10.995: E/AndroidRuntime(1117): FATAL EXCEPTION: main
05-20 09:07:10.995: E/AndroidRuntime(1117): java.lang.NullPointerException
05-20 09:07:10.995: E/AndroidRuntime(1117): at info.androidhive.tabsswipe.MoviesFragment$1.onClick(MoviesFragment.java:33)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.view.View.performClick(View.java:4240)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.view.View$PerformClick.run(View.java:17721)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Handler.handleCallback(Handler.java:730)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.os.Looper.loop(Looper.java:137)
05-20 09:07:10.995: E/AndroidRuntime(1117): at android.app.ActivityThread.main(ActivityThread.java:5103)
05-20 09:07:10.995: E/AndroidRuntime(1117): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 09:07:10.995: E/AndroidRuntime(1117): at java.lang.reflect.Method.invoke(Method.java:525)
05-20 09:07:10.995: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
05-20 09:07:10.995: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-20 09:07:10.995: E/AndroidRuntime(1117): at dalvik.system.NativeStart.main(Native Method)
請給我建議一些解決方案或一些好的技術。
看看使用Tabs創建滑動視圖和ViewPager.setCurrentItem()的文檔:您可以在Button的事件偵聽器上調用此方法。 請分享您的一些代碼,以獲得針對性更強的解決方案。
您需要像這樣修改代碼:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_event, container, false);
btn = (Button) rootView.findViewById(R.id.btn);
btnWeb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent newFrag = new Intent(getActivity(), NewFragment.class);
startActivity(newFrag);
});
}
});
return rootView;
我還建議您使用ViewPager來做到這一點。 一個很好的教程可以在這里找到:
希望這對您有所幫助:)
Button registerButton = (Button) rootView
.findViewById(R.id.register_btn);
registerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
viewPager = (ViewPager) getActivity().findViewById(
R.id.viewpager);
viewPager.setCurrentItem(1);
// set tab postion 1 to move next tab
}
如果您位於片段頁面(例如說第一頁)中,而該頁面在視圖分頁器中有一個按鈕可以切換到另一個片段頁面(例如說在位置x上),則可以使用:
ViewPager viewPager = getParentFragment().getView().findViewById(R.id.viewpager_fragment);
viewPager.setCurrentItem(position);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.