在 View Pager 中的 Fragment 之间传递数据

2023-12-24

在视图分页器中的片段之间传递数据时需要帮助!我们尝试在片段内将数据作为包传递。在 Fragment.getInstance() 方法内部,尝试从其他 Fragment.getArguments() 获取数据。

活动代码

package com.northerly.bumpr;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.widget.TextView;


import com.northerly.bumpr.Fragment.EnterOtp;

import com.northerly.bumpr.Fragment.MobileNumber;
import com.northerly.bumpr.utils.NonSwipeableViewPager;


public class LoginActivity extends AppCompatActivity {

public static NonSwipeableViewPager mPager;
PagerAdapter mPagerAdapter;
private static final int NUM_PAGES = 2;
public static Bundle myBundle = new Bundle();
public static TextView tv;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);


    mPager = (NonSwipeableViewPager) findViewById(R.id.pager);

    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setOffscreenPageLimit(0);

    mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // When changing pages, reset the action bar actions since they are dependent
            // on which page is currently active. An alternative approach is to have each
            // fragment expose actions itself (rather than the activity exposing actions),
            // but for simplicity, the activity provides the actions in this sample.
            invalidateOptionsMenu();
        }
    });





}

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }



    @Override
    public Fragment getItem(int position) {
        switch (position) {

            case 0:
                return MobileNumber.newInstance();

            case 1:
                return EnterOtp.newInstance();

        }
        return MobileNumber.newInstance();
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}






}

片段代码:

package com.northerly.bumpr.Fragment;

import android.app.Dialog;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.net.nsd.NsdManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.IntRange;
import android.support.design.widget.Snackbar;    
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.northerly.bumpr.HomeActivity;
import com.northerly.bumpr.LoginActivity;
import com.northerly.bumpr.R;
import com.northerly.bumpr.common.ConnectionDetector;
import com.northerly.bumpr.common.OfferInfoChild;
import com.northerly.bumpr.common.OfferInfoGroup;
import com.northerly.bumpr.utils.DBHandler;
import com.northerly.bumpr.utils.GarageGetterSetter;
import com.northerly.bumpr.utils.GlobalData;
import com.northerly.bumpr.utils.PreferenceConnector;
import com.northerly.bumpr.utils.Webservice;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONStringer;

import java.lang.ref.WeakReference;
import java.util.ArrayList;

import static android.R.id.list;


public class MobileNumber extends Fragment {

Button cont;
EditText ph_no;
ConnectionDetector detector;
FrameLayout mobil_num_lay;
public static String mobile;

private OnFragmentInteractionListener mListener;

public MobileNumber() {

}

public static MobileNumber newInstance() {
    MobileNumber fragment = new MobileNumber();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    ViewGroup rootView = (ViewGroup)          inflater.inflate(R.layout.fragment_mobile_number, container, false);

    cont = (Button) rootView.findViewById(R.id.cont);
    ph_no = (EditText) rootView.findViewById(R.id.s_ph);

    mobil_num_lay=(FrameLayout)rootView.findViewById(R.id.mobile_number_lay);

detector=new ConnectionDetector(getActivity());
    cont.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (ph_no.getText().toString().length()!=0 && ph_no.getText().toString().length()!=10)
            {
                final Snackbar snackbar = Snackbar.make(mobil_num_lay,     "Please Enter a valid  Mobile Number", Snackbar.LENGTH_SHORT);

                snackbar.setAction("Dismiss", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        snackbar.dismiss();
                    }
                });

                // Changing message text color
                snackbar.setActionTextColor(getResources().getColor(R.color.colorAccent));
                snackbar.show();



            } else {
                mobile="+91"+ph_no.getText().toString();
                if (detector.isConnectingToInternet()) {
                    new AsyncLogin(getActivity()).execute();
                } else {
                    Toast.makeText(getActivity(),     getResources().getString(R.string.internet_connection_exception),
                            Toast.LENGTH_SHORT).show();
                }
            }

//                GoSignUp.myBundle.putString("Timer","on");



        }
    });

    return rootView;
}

public interface OnFragmentInteractionListener {

    void onFragmentInteraction(Uri uri);
}

public void timerOn() {

    new CountDownTimer(30000, 1000) {

        public void onTick(long millisUntilFinished) {

            LoginActivity.tv.setText("0:" + millisUntilFinished / 1000);

        }

        public void onFinish() {

                LoginActivity.tv.setText(getResources().getString(R.string.resend_otp));

        }
    }.start();
}

public class AsyncLogin extends AsyncTask<String, String, Void> {
    String response;
    Dialog dialog;
    private final WeakReference<FragmentActivity> mainActivityWeakRef;

    public AsyncLogin(FragmentActivity mainActivity) {
        super();
        this.mainActivityWeakRef = new WeakReference<>(mainActivity);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        if (mainActivityWeakRef.get() != null && !mainActivityWeakRef.get().isFinishing()) {
            dialog = new Dialog(getActivity());
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setContentView(R.layout.custom_dialog);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
            dialog.show();
        }
    }

    protected Void doInBackground(String... args) {
        try {
            JSONStringer userJson = null;
//              userJson = new JSONStringer().object().key(GlobalData.user_id)
//                      .value(PreferenceConnector.readString(getActivity(), PreferenceConnector.USER_ID, ""))
//                      .endObject();

            userJson = new JSONStringer().object().key(GlobalData.username)
                    .value(mobile)
                    .endObject();

            String url = GlobalData.serverName + GlobalData.user_status;

            response = Webservice.PostDataAlter(url, userJson);

        } catch (Exception e) {
            e.getMessage();
        }
        return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        //Below code is added to avoid Fragment not attached to activity error
        if(isAdded()){
            getResources().getString(R.string.app_name);
        }

        Log.d((mainActivityWeakRef.get() != null) + "", "onPostexecute");
        if (mainActivityWeakRef.get() != null && !mainActivityWeakRef.get().isFinishing()) {
            if (dialog.isShowing()) {
                /* Dismiss the progress dialog after sharing */
                dialog.dismiss();
            }
            ArrayList<OfferInfoGroup> GrpList = new ArrayList<OfferInfoGroup>();
            try {
                System.out.println("response "+ response.toString());
                JSONObject jsonobj = new JSONObject(response);
                String UserDetails = jsonobj.getString(getResources().getString(R.string.response_status));

                System.out.println("Hi"+UserDetails);


                if (UserDetails.equals(getResources().getString(R.string.response_register)))
                {

//                        String     otp_verify=jsonobj.getString(getResources().getString(R.string.verify_otp));
//                            PreferenceConnector.writeString(getActivity(),PreferenceConnector.OTP_VERIFY,otp_verify);

                    String result1 = jsonobj.getString(getResources().getString(R.string.response_results));
                    JSONArray arr = new JSONArray(result1);
                    String result2 = jsonobj.getString(getResources().getString(R.string.response_results2));
                        JSONArray arr2 = new JSONArray(result2);
                    String result3 = jsonobj.getString(getResources().getString(R.string.response_results3));
                    JSONArray arr3 = new JSONArray(result3);

                    System.out.println("Hello"+arr);
                    for (int i=0;i<arr.length();i++)
                    {
                        String userid = arr.getJSONObject(i).getString(GlobalData.reg_id);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.USER_ID,userid);
                        String name=arr.getJSONObject(i).getString(GlobalData.name);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.USER_NAME,name);
                        String email =arr.getJSONObject(i).getString(GlobalData.email);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.USER_EMAIL,email);
                        String mobile=arr.getJSONObject(i).getString(GlobalData.username);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.USER_PHONE,mobile);
                        String city=arr.getJSONObject(i).getString(GlobalData.city);
                            PreferenceConnector.writeString(getActivity(),PreferenceConnector.USER_CITY,city);
                    }

                    System.out.println("Results 2"+result2);
                    System.out.println("Array 2"+arr2);

                    for (int j=0;j<arr2.length();j++)
                    {
                        String id = arr2.getJSONObject(j).getString(GlobalData.Vehicle_id);
                        String user_id = arr2.getJSONObject(j).getString(GlobalData.user_id);
                        String brand = arr2.getJSONObject(j).getString(GlobalData.brand);
                        String model = arr2.getJSONObject(j).getString(GlobalData.model);
                        String type = arr2.getJSONObject(j).getString(GlobalData.type);
                        String fuel_type = arr2.getJSONObject(j).getString(GlobalData.fuel_type);
                        String reg_no = arr2.getJSONObject(j).getString(GlobalData.reg_no);
                        String year = arr2.getJSONObject(j).getString(GlobalData.year);
                        String km_driven = arr2.getJSONObject(j).getString(GlobalData.km_driven);
                        String variant = arr2.getJSONObject(j).getString(GlobalData.variant);
                        DBHandler db = new DBHandler(getActivity());


/*          "user_id": "20666",
        "vehicle_id": "170",
        "brand": "Hero MotoCorp",
        "model": "Xtreme (2014)",
        "type": "2w",
        "fuel_type": "PETROL",
        "year": "2014",
        "km_driven": "17240",
        "variant": ""*/
                        db.insert_all(Integer.parseInt(user_id),     Integer.parseInt(id),brand,model,type,fuel_type,reg_no,km_driven,year,variant);

                        ArrayList<GarageGetterSetter> lis = db.getAllVehicles();

                        System.out.println(lis);



                    }

                    for (int k=0;k<arr3.length();k++)
                    {
                        String otp_verify=arr3.getJSONObject(k).getString(GlobalData.verify_otp);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.OTP_VERIFY,otp_verify);
                    }

                        LoginActivity.mPager.setCurrentItem(LoginActivity.mPager.getCurrentItem() + 1);
                }

                else if (UserDetails.equals(getResources().getString(R.string.response_new_user))){

                    String result1 = jsonobj.getString(getResources().getString(R.string.response_results));
                    JSONArray arr = new JSONArray(result1);
                    String result2 = jsonobj.getString(getResources().getString(R.string.response_results2));
                    JSONArray arr2 = new JSONArray(result2);
                    String result3 = jsonobj.getString(getResources().getString(R.string.response_results3));
                    JSONArray arr3 = new JSONArray(result3);

                    for (int k=0;k<arr3.length();k++)
                    {
                        String otp_verify=arr3.getJSONObject(k).getString(GlobalData.verify_otp);
                        PreferenceConnector.writeString(getActivity(),PreferenceConnector.OTP_VERIFY,otp_verify);
                    }
                    LoginActivity.mPager.setCurrentItem(LoginActivity.mPager.getCurrentItem() + 1);
                }

 //                    JSONArray arr2=new JSONArray(result2);







           //      else if     (UserDetails.equals(getResources().getString(R.string.response_register))){








           //     }

            } catch (Exception e) {
                if (e.getMessage() != null) {
                    Toast.makeText(getActivity(),     getResources().getString(R.string.AsyncException),
                            Toast.LENGTH_SHORT).show();
                }
                e.printStackTrace();
            }
        }
    }
}
}

在片段之间传递数据时需要帮助


您可以尝试通过创建一个公共的单例类来在片段之间传递数据。根据您的要求,您可以创建一个类来设置和获取数据。 下面是一个单例类的示例,可用于在片段之间传递数据

public class DataClass {
    private static DataClass dataObject = null;

    private DataClass() {

    }

    public static DataClass getInstance() {
        if (dataObject == null)
            dataObject = new DataClass();
        return dataObject;
    }
    private String distributor_id;;

    public String getDistributor_id() {
        return distributor_id;
    }

    public void setDistributor_id(String distributor_id) {
        this.distributor_id = distributor_id;
    }
}

之后设置您的数据,然后再进入下一个屏幕。

DataHolderClass.getInstance().setDistributor_id("your data");

并获取数据

String data = DataClass.getInstance().getDistributor_id();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 View Pager 中的 Fragment 之间传递数据 的相关文章

  • 如何检测 Android 设备中的新应用

    我想检测用户何时安装或删除应用程序 但没有找到BroadcastReceiver就是这样做的 在我的应用程序中 我获取了有关该类已安装应用程序的信息PackageManager 但我不想定期扫描应用程序 有没有BroadcastReceiv
  • JSON(Gson)反序列化为超类对象然后转换为子类对象的最佳方法是什么

    我目前正在研究在Android上使用Gson for Json 刚刚遇到这个问题 假设我们有如下类 class Command public int id COMMAND ID UNSPECIFIED class CommandSpecif
  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • 带 html 表格的 TextView

    我有个问题 我想放入 TextView html 格式文本 我添加如下
  • 使用 Firebase Java API 检索/格式化数据的最佳方式

    我在用着Firebase用于数据存储Android项目 并使用Firebase Java API来处理数据 不过 我不确定我是否尽可能高效地完成此操作 并且我希望获得一些有关检索和格式化数据的最佳实践的建议 我的Firebase存储库看起来
  • 如何在 Android 中动态添加新的 Android 芯片?

    我有一个名为 Question 的类 其中包含标签的字符串数组 我试图使用 Kotlin 显示 Recyclerview 中的每个问题以及新芯片中的每个标签 这些芯片将包含在一个 ChipGroup 中 我的问题是 如何将数组的每个标签元素
  • Jack(Java Android 编译器套件)将如何影响 Scala 开发人员

    现在随着公告Jack https source android com source jack html谷歌阐明了 Java 与 Android 相关的可预见的未来 但这对 Scala 和其他基于 JVM 的语言开发人员有何影响 尤其 Sc
  • Android:CellID 不适用于所有运营商?

    当我请求 Cell ID 和 LAC 信息时 在某些设备上我无法检索它们 我使用这段代码 TelephonyManager tm TelephonyManager getSystemService Context TELEPHONY SER
  • 如何获取与 TextView 关联的字符串资源的 id?

    我可以访问 TextView 实例 获取它的资源 ID 并通过以下方式获取它的资源名称getResources getResourceEntryName 但我似乎找不到一种方法来获取与其关联的字符串的 id 如何动态获取与 TextView
  • opengl 覆盖在相机视图上

    我仍然没有找到在相机预览顶部显示 opengl 叠加层的正确方法 有一个 hack 你可以调用 setContentView GLSurfaceView addContentView MyCameraSurfaceView 但它无法正常工作
  • 将项目导入 Eclipse 后出现“必须重写超类方法”错误

    任何时候我必须将我的项目重新导入到 Eclipse 中 如果我重新安装了 Eclipse 或者更改了项目的位置 几乎全部我的重写方法的格式不正确 导致错误 该方法必须重写超类方法 值得注意的是 无论出于何种原因 Android 项目中方法参
  • Android,在连接wifi的情况下与移动数据通信,无需上网

    我有一个汽车配套应用程序 需要与 WiFi 和移动数据网络进行通信 我的车辆控制单元提供了一个无需互联网访问的 WiFi 网络 它公开了我们可以从应用程序调用的 API 服务 除此之外 我们还需要使用手机移动数据 3G 4G 与另一个可通过
  • 旋转器扩展到屏幕边界之外

    我有一个布局 其中包含一个三行的 TableLayout 每行都有一个 TextView 和一个 Spinner Spinners 的柱子设置为拉伸 我的问题是 当旋转器包含长字符串时 旋转器会超出屏幕边缘 我希望他们截断字符串 这是问题的
  • 如何防止 Xamarin Android 应用程序的设备字体大小影响?

    如果我更改设备字体 那么它也会更改我的应用程序字体 我不想根据设备字体更改我的应用程序字体 于是我就搜索了一下这个问题 结果发现方面 https developer android com guide topics resources mo
  • HTC One M8 - 使用第二个后置摄像头

    我有一台 HTC One M8 设备 它有 2 个后置摄像头和一个额外的前置摄像头 我的问题是尝试访问第二个后置摄像头 我已经成功制作了一个应用程序 它同时运行 2 个摄像头 1 个前置摄像头和 1 个后置摄像头 但问题是我无法访问第二个后
  • android.R.layout.simple_list_item_1是什么?

    在我看到的所有示例中 他们在创建 ArrayAdapter 时仅使用 android R layout simple list item 1 android R layout simple list item 1是什么 它只是一个名为sim
  • 应用程序启动时显示徽标几秒钟

    我想在应用程序启动并且菜单可见之前显示徽标几秒钟 当它消失时我也想使用一些 我应该创建一个新活动吗 我可以在布局中设置它吗 为包含您的徽标的初始屏幕定义一个布局 然后将此代码添加到您的活动中 public void onCreate Bun
  • 从应用程序打开无线设置

    我想直接从我的应用程序打开 设置 gt 无线和网络 我怎样才能做到这一点 尝试这个 startActivity new Intent android provider Settings ACTION WIRELESS SETTINGS 或者
  • 如何在Android AsyncTask中显示Toast?

    我正在尝试在我的initial background类中显示Toast 扩展为AsyncTask
  • 如何在 EditText 中用逗号分隔数字

    我有一个 EditText 其 inputType 为number 当用户打字时 我想用逗号分隔数字 这是一个小例子 123 将表示为 123 1234 将表示为 1 234 12345 将表示为 12 345 等等 我尝试使用 TextW

随机推荐