【问题标题】:How to switch from one tab to another tab by clicking on button in Android?如何通过单击 Android 中的按钮从一个选项卡切换到另一个选项卡?
【发布时间】:2014-05-20 12:43:52
【问题描述】:

我尝试在 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)

请建议我一些解决方案或一些好的技术来做到这一点。

【问题讨论】:

    标签: android button tabs click android-viewpager


    【解决方案1】:
        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 
    
            }
    

    【讨论】:

      【解决方案2】:

      查看Creating Swipe Views with TabsViewPager.setCurrentItem() 的文档:您可以在Button 的事件侦听器上调用此方法。请分享您的一些代码,以便为您的问题提供更有针对性的解决方案。

      【讨论】:

        【解决方案3】:

        你需要像这样修改你的代码:

        @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 来执行此操作。可以在here找到一个很棒的教程:

        希望对你有帮助:)

        【讨论】:

        • 不不,这与我的问题无关...我知道如何通过 Intent 切换到活动...我想知道如何通过单击按钮切换到其他选项卡...
        • 上面的代码会带你到新的片段。这取决于你给片段起的名字。
        【解决方案4】:

        如果您在一个片段页面(比如说第一页)中,它有一个按钮可以在视图寻呼机中切换到另一个片段页面(比如说在位置 x),那么您可以使用:

        ViewPager viewPager = getParentFragment().getView().findViewById(R.id.viewpager_fragment);
                viewPager.setCurrentItem(position);
        

        【讨论】:

          猜你喜欢
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          • 2018-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-20
          相关资源
          最近更新 更多