在 pagerAdapter 中的片段之间发送数据

2023-12-13

您好,我正在尝试在两个片段之间发送数据(armarFragment 到 cocinaFragment),但我不知道该怎么做,因为两者都在同一个 Activity (tabsActivity) 中,该 Activity 实现了 pagerAdaptar 以显示不同的片段。这里我放了我的代码。谢谢。

  1. tabsActivity.java(在里面你可以找到pagerAdapter类)。

    public class tabsActivity extends AppCompatActivity {
    
    public MyFragmentPagerAdapter myFragmentPagerAdapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabs);
    
        android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.appbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Arma tu pizza");
    
        myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
    
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(myFragmentPagerAdapter);
    
        TabLayout tabLayout = (TabLayout) findViewById(R.id.appbartabs);
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setupWithViewPager(viewPager);
    
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_login, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
    
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
    
        return super.onOptionsItemSelected(item);
    }/*__________________ NEW CLASS, PAGERADAPTAR ____________________*/
    
    
    public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
        final int PAGE_COUNT = 4;
        String tabTitles[] =
                new String[] { "Inicio","Armar pizza","Cocina","Chef"};
    
        public MyFragmentPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public int getCount() {
            return PAGE_COUNT;
        }
    
        @Override
        public Fragment getItem(int position) {
    
            Fragment f = null;
    
            switch(position) {
                case 0:
                    f = inicioFragment.newInstance();
                    break;
                case 1:
                    f = armarFragment.newInstance();
                    break;
                case 2:
                    f = cocinaFragment.newInstance();
                    break;
                case 3:
                    f = chefFragment.newInstance();
                    break;
            }
            return f;
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            // Generate title based on item position
            return tabTitles[position];
        }
    }}
    
  2. armarFregment.java(在里面你可以找到一个 viewHolder 但忽略它)。

    public class armarFragment extends Fragment implements View.OnClickListener{
    
    View rootView;
    
    private RecyclerView recycler;
    private productoAdapter adapter;
    private RecyclerView.LayoutManager lManager;
    private EditText txtNombrePizza;
    
    private ArrayList<producto> productosSeleccionados;
    
    Button btnEnviarALaCocina;
    RadioButton pequeña;
    RadioButton mediana;
    RadioButton grande;
    
    
    public static armarFragment newInstance() {
        armarFragment fragment = new armarFragment();
        return fragment;
    }
    
    public armarFragment() {
        productosSeleccionados = new ArrayList<producto>();
    }
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_armar, container, false);
    
        ArrayList<producto> items = new ArrayList<producto>();
    
        items.add(new producto(R.drawable.jamon, "Jamón", "¡Pssst!, sabe muy bien en pizzas dulces.", 2000));
        items.add(new producto(R.drawable.pollo, "Pollo","¡Pssst!, combina con TODO.",1500));
        items.add(new producto(R.drawable.queso, "Queso","Delicioso queso mozzarela, ¡Yummy Yummy!",2000));
        items.add(new producto(R.drawable.champinones, "Champiñones","Suculentos champiñones equixitos y suaves.",1500));
        items.add(new producto(R.drawable.peperoni, "Pepperoni","Fresco pepperoni con un toque de picante.",3000));
        items.add(new producto(R.drawable.pina, "Piña","¡Fresca y jugosa piña Colombiana papá!",1500));
        items.add(new producto(R.drawable.pasas, "Ciruelas pasas","Las más negritas y a la vez las más dulces.",1500));
        items.add(new producto(R.drawable.salami, "Salami","Delicioso salami en rodajitas así como el salchichon cervecero.",3000));
        items.add(new producto(R.drawable.chorizo, "Chorizo","¡Choricito santarrosano ome!",3000));
        items.add(new producto(R.drawable.cebolla, "Cebolla","La que ha hecho llorar a mas de uno, fresca y suave al paladar",1000));
        items.add(new producto(R.drawable.carnemolida, "Carne molida","Ideal para los arriesgados; fresca y deliciosa.",2500));
        items.add(new producto(R.drawable.pimenton, "Pimentón","Uno de los más enojados; crujiente y exquisito.",1000));
        items.add(new producto(R.drawable.tomate, "Tomate", "Otro rojo más; cosechados en nuestra tierrita.", 1000));
        items.add(new producto(R.drawable.maiz, "Maíz tierno","Se dice por ahi que el maíz es el más tierno",1000));
        items.add(new producto(R.drawable.jalapeno, "Jalapeño", "Si la cebolla te hace lorar imaginate este.", 2000));
        items.add(new producto(R.drawable.tocineta, "Tocineta","Deiciosa tocineta; ideal en pizzas de sal.",500));
        items.add(new producto(R.drawable.aceituna, "Aceituna", "Suaves y jugosas aceitunas, ideales para pizzas con proteinas.", 1000));
        items.add(new producto(R.drawable.oregano, "Orégano","El toque de sabor que nunca ha de faltar.",300));
        items.add(new producto(R.drawable.salsabbq, "Salsa BBQ", "La salsa ideal para pizzas de sal.", 500));
    
        recycler = (RecyclerView) rootView.findViewById(R.id.reciclador);
        recycler.setHasFixedSize(true);
    
        btnEnviarALaCocina = (Button) rootView.findViewById(R.id.btnEnviarALaCocina);
        btnEnviarALaCocina.setOnClickListener(this);
    
        txtNombrePizza = (EditText) rootView.findViewById(R.id.setNombrePizza);
    
        pequeña = (RadioButton) rootView.findViewById(R.id.radioPersonal);
        pequeña.setOnClickListener(this);
        mediana = (RadioButton) rootView.findViewById(R.id.radioMediana);
        mediana.setOnClickListener(this);
        grande = (RadioButton) rootView.findViewById(R.id.radioGrande);
        grande.setOnClickListener(this);
    
        // Usar un administrador para LinearLayout
        lManager = new LinearLayoutManager(getContext());
        recycler.setLayoutManager(lManager);
    
        // Crear un nuevo adaptador
        adapter = new productoAdapter(items);
    
        recycler.setAdapter(adapter);
    
        recycler.setItemAnimator(new DefaultItemAnimator());
    
        return rootView;
    }
    
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnEnviarALaCocina:
    
                String nombrePizza = txtNombrePizza.getText().toString();
    
                productosSeleccionados = adapter.getProductosSeleccionados();
    
                Log.i("prueba 1", "size: " + productosSeleccionados.size());
    
                ArrayList<String> nombreProductos = new ArrayList<String>();
                ArrayList<Integer> precioProductos = new ArrayList<Integer>();
    
                for(producto p: productosSeleccionados){
                    nombreProductos.add(p.getNombre());
                    precioProductos.add(p.getPrecio());
                }
    
                if(productosSeleccionados.size() == 0){
    
                    Toast.makeText(getContext(), "Debes seleccionar ingredientes.",
                            Toast.LENGTH_LONG).show();
    
                }else if(nombrePizza.matches("")) {
    
                    Toast.makeText(getContext(), "Debes ponerle un nombre a la pizza.",
                            Toast.LENGTH_LONG).show();
                }else if(pequeña.isChecked() == false && mediana.isChecked() == false && grande.isChecked() == false){
    
                    Toast.makeText(getContext(), "Debes selecionar un tamaño.",
                            Toast.LENGTH_LONG).show();
                }
    
                break;
        }
    }
    
    /*______________________________________________________________________________________________
    NEW CLASS, PRODUCTOVIEWHOLDER
     _______________________________________________________________________________________________*/
    
    public class productoAdapter extends RecyclerView.Adapter<productoAdapter.productoViewHolder> {
    
        private ArrayList<producto> productosSeleccionados;
        private ArrayList<producto> productos;
    
        public class productoViewHolder extends RecyclerView.ViewHolder {
    
            // Campos respectivos de un item
            public ImageView imgProducto;
            public TextView txtNombre, txtDescripcion, txtPrecio;
            public Button btnAgregar;
    
            public productoViewHolder(View v) {
                super(v);
                imgProducto = (ImageView) v.findViewById(R.id.imgProducto);
                txtNombre = (TextView) v.findViewById(R.id.txtNombre);
                txtDescripcion = (TextView) v.findViewById(R.id.txtDescripcion);
                txtPrecio = (TextView) v.findViewById(R.id.txtPrecio);
                btnAgregar = (Button) v.findViewById(R.id.btnAgregar);
            }
        }
    
        public productoAdapter(ArrayList<producto> items) {
            productosSeleccionados = new ArrayList<producto>();
            this.productos = items;
        }
    
    
        public ArrayList<producto> getProductosSeleccionados(){
            return productosSeleccionados;
        }
    
        public int getItemCount() {
            return productos.size();
        }
    
        public productoViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.card_productos, viewGroup, false);
    
            return new productoViewHolder(v);
        }
    
        public void onBindViewHolder(productoViewHolder viewHolder, final int i) {
            viewHolder.imgProducto.setImageResource(productos.get(i).getImagen());
            viewHolder.txtNombre.setText(productos.get(i).getNombre());
            viewHolder.txtDescripcion.setText(productos.get(i).getDescripion());
            viewHolder.txtPrecio.setText("$ " + String.valueOf(productos.get(i).getPrecio()));
            viewHolder.btnAgregar.setOnClickListener(new View.OnClickListener(){
    
                @Override
                public void onClick(View v) {
                    productosSeleccionados.add(productos.get(i));
    
                }
            });
        }
    }}
    
  3. cocinaFrgment.java(在里面你可以找到一个 viewHolder 但忽略它)。

公共类 cocinaFragment 扩展 Fragment {

View rootView;

private RecyclerView recycler;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager lManager;

ArrayList<pizza> items;

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

public cocinaFragment() {
    items = new ArrayList<pizza>();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_cocina, container, false);


    recycler = (RecyclerView) rootView.findViewById(R.id.reciclador);
    recycler.setHasFixedSize(true);

    // Usar un administrador para LinearLayout
    lManager = new LinearLayoutManager(getContext());
    recycler.setLayoutManager(lManager);

    // Crear un nuevo adaptador
    adapter = new pizzaAdapter(items);
    recycler.setAdapter(adapter);

    return rootView;
}


/*______________________________________________________________________________________________
NEW CLASS, PIZZAVIEWHOLDER
 _______________________________________________________________________________________________*/

public class pizzaAdapter extends RecyclerView.Adapter<pizzaAdapter.pizzaViewHolder> implements View
.OnClickListener{
    private ArrayList<pizza> pizzas;

    private View.OnClickListener listener;

    public class pizzaViewHolder extends RecyclerView.ViewHolder {
        // Campos respectivos de un item
        public TextView txtNombrePizza, txtTamaño, txtIngredientes, txtPrecio;

        public pizzaViewHolder(View v) {
            super(v);
            txtNombrePizza = (TextView) v.findViewById(R.id.txtNombrePizza);
            txtTamaño = (TextView) v.findViewById(R.id.txtTamaño);
            txtIngredientes = (TextView) v.findViewById(R.id.txtIngredientes);
            txtPrecio = (TextView) v.findViewById(R.id.txtPrecio);
        }
    }

    public pizzaAdapter(ArrayList<pizza> items) {
        this.pizzas = items;
    }


    public int getItemCount() {
        return pizzas.size();
    }


    public pizzaViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.card_pizzas, viewGroup, false);

        v.setOnClickListener(this);

        return new pizzaViewHolder(v);
    }

    public void setOnClickListener(View.OnClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onClick(View view) {
        if(listener != null)
            listener.onClick(view);
    }



    public void onBindViewHolder(pizzaViewHolder viewHolder, int i) {
        viewHolder.txtNombrePizza.setText(pizzas.get(i).getNombre());
        viewHolder.txtTamaño.setText(pizzas.get(i).getTamaño());
        viewHolder.txtIngredientes.setText(pizzas.get(i).getIngredientes());
        viewHolder.txtPrecio.setText("$ " + String.valueOf(pizzas.get(i).getPrecio()));
    }
}

}


好的,正如 android 指南所说,您必须在片段中创建一个界面。例如:

public class armarFragment extends Fragment implements View.OnClickListener{
    ...
    private armarFragmentListener mListener;

    public interface armarFragmentListener {
        void onEnviar ();
    }

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        mListener = (armarFragmentListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement armarFragmentListener ");
    }
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btnEnviarALaCocina:
            //Do what you want.
            mListener.onEnviar(/*Change interface to pass arguments if you want*/);
        break;
    }
}

您的活动必须实现该接口并执行相应的操作,例如调用片段的方法来获取数据。当您拥有数据时,您可以将其作为参数或其他方式传递给新片段。

当您在 android studio 中创建空白片段时,它默认将该结构放在类上。创建一个新的空白片段并查看它。

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

在 pagerAdapter 中的片段之间发送数据 的相关文章

随机推荐

  • 获取系统音量 iOS

    我的情况很简单 我需要播放警告信号并希望确保用户会听到它 所以我想检查系统音量 如何知道当前系统音量是多少 斯威夫特更新 let vol AVAudioSession sharedInstance outputVolume 音频会话可以提供
  • 使用 MySQL 获取整数中零的数量

    假设我在 MySQL 中有一个整数值 10090 我需要计算该数字中出现的所有零数字 因此对于前面的情况它将返回 3 select count zeros number from dual when number 10090 it retu
  • 需要找到页面上隐藏div的高度(设置为display:none)

    我需要测量隐藏元素内部的 div 的 offsetHeight div style display none div Lorem Ipsum dolor sit amet div div 父级divmust设置为 display none
  • 如何制作固定位置的菜单栏?

    我想设计我的菜单栏像这样 当您向下滚动时 它固定在网站的顶部 而当页面加载时 它不会固定在该位置 如何用 CSS 来完成呢 您想要的是 粘性导航栏 菜单 最简单的方法是将以下 CSS 添加到菜单 导航栏 position fixed top
  • C# 2.0:MethodBase.GetCurrentMethod() 可以返回 null 吗?

    我正在追踪 NullReferenceException 并且官方文档是缺乏 这是 C 2 0 代码 看看 Reflector 它看起来可以 MethodImpl MethodImplOptions NoInlining public st
  • 当我尝试上传 Microsoft 商店时,UWP/Xamarin 在提交测试中崩溃

    我正在使用 Xamarin Forms 开发一个带有 SignalR 的消息发送应用程序 我在本地和 Android 上测试了无数次 它运行良好 没有崩溃 但是当他们进行测试以将其上传到微软商店时 他们报告说我的应用程序崩溃了 根据应用程序
  • python 中 perluniprops 的等价物是什么?

    In perl 有perlunipropsUnicode 7 的索引 http perldoc perl org perluniprops html我可以执行以下操作来填充开始和结束标点符号 s p Open Punctuation 1 g
  • 为什么我无法设置 cookie 并重定向?

    我在设置 cookie 和执行操作时遇到问题302重定向在chrome中 cookie没有被设置 我没有测试过safari 在其他浏览器中我遇到了同样的问题 直到我添加Path 到 cookie 现在它可以工作了 这是标题的样子 状态是30
  • 为什么 Integer a=10 在 java 中是有效的语句? [复制]

    这个问题在这里已经有答案了 据我所知 Integer 是一个包装器class对于整数 所以必须创建一个对象来初始化a的值 Integer x new Integer 10 But Integer x 10 似乎工作完美 有人可以解释一下吗
  • 安装 coremltools 时出错

    我正在研究 Core ML Apple iOS 框架 我已经读过安装 coremltools 来创建自己的模型 我已经安装了pythonsudo python Users administrator Downloads get pip py
  • MongoDB 字段名称中不允许使用哪些字符?

    我当然明白了 和 SPACE 是不允许的 还有其他禁用字符吗 您可以在字段名称中使用任何不属于的 UTF8 字符 特殊 包含 或以 开头 https jira mongodb org browse SERVER 3229 https sta
  • 注入非角度 JS 库

    在我们的项目中 我们使用 NPM 和 Browserify 进行第三方依赖管理 它与 AngularJS 结合使用效果很好 感谢 CommonJS 模块 以下代码显示了依赖结构 它与 Angular 的依赖注入配合得很好 function
  • 如何使用末尾带有 # 的 Uri.parse()

    我尝试使用 GSM 代码通过 Android 应用程序转接电话 例如 如果我致电 21 otherNumber 我所有的电话都将转接至其他号码 My code Uri transfert Uri parse tel 21 numero In
  • C++ eof() 问题 - 永远不会返回 true?

    所以我正在尝试读取这个文件 一切看起来应该可以工作 但在运行时程序超时并停止工作 我必须关闭它 到底是怎么回事 我怀疑 oef 测试永远不会返回 true 并且它会不断在文件中查找更多内容 我没有在文本文件中拖动空行 我疯狂地尝试调试这个
  • 在 Windows 中找不到命令 php

    我已经在 Windows 7 中安装了 xampp 服务器 我已经检查了浏览器的工作情况 但我正在尝试运行 php v 命令提示符 我收到以下错误消息 php is not recognized as an internal or exte
  • 使用 Laravel 5.8 / Cashier / Stripe 设置订阅时遇到问题

    我按照这个教程一步步操作 https appdividend com 2018 12 05 laravel stripe payment gateway integration tutorial with example 然而 当我去测试它
  • 在文件中查找字符串的最快方法

    我有一个不超过 10KB 的日志文件 文件大小最大可达 2 MB 我想查找文件中是否至少出现一组这些字符串 这些字符串将位于不同的行 例如 行动 输入 结果 我至少需要知道文件中是否存在上述一组 我已经做了大约 100 次测试 每次日志都不
  • PHP 正则表达式在冒号之前转换文本以进行链接

    我需要找到第一次出现的冒号 并获取之前的完整字符串并将其附加到链接中 e g username twitter nice site RT www google com visited 需要转换为 a href http twitter co
  • 用于 Web 开发的 iOS Touch ID

    我目前正在尝试找到一种方法来构建响应式网站 但是一旦网站在 iOS 设备上加载 我想使用新的 iOS Touch ID api 来允许会员登录 我知道当然可以使用 Native 以及 Cordova 来做这样的事情 http cordova
  • 在 pagerAdapter 中的片段之间发送数据

    您好 我正在尝试在两个片段之间发送数据 armarFragment 到 cocinaFragment 但我不知道该怎么做 因为两者都在同一个 Activity tabsActivity 中 该 Activity 实现了 pagerAdapt