在 pagerAdapter 中的片段之间发送数据
Send data between fragments in a pagerAdapter
你好,我正在尝试在两个片段之间发送数据(armarFragment 到 cocinaFragment),但我不知道该怎么做,因为它们都在同一个 Activity (tabsActivity) 中,它实现了一个 pagerAdaptar 来显示不同的片段。在这里我把我的代码。谢谢
tabsActivity.java(在里面你可以找到 class 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];
}
}}
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));
}
});
}
}}
cocinaFrgment.java(在里面你可以找到一个viewHolder但忽略它)。
public class cocinaFragment 扩展片段 {
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;
}
}
您的 activity 必须实现该接口并执行相应的操作,例如调用片段的方法来获取数据。当您拥有数据时,您可以将其作为参数或其他方式传递给新片段。
当您在 android studio 中创建一个空白片段时,它会默认将该结构放在 class 上。新建一个空白片段,看一下。
你好,我正在尝试在两个片段之间发送数据(armarFragment 到 cocinaFragment),但我不知道该怎么做,因为它们都在同一个 Activity (tabsActivity) 中,它实现了一个 pagerAdaptar 来显示不同的片段。在这里我把我的代码。谢谢
tabsActivity.java(在里面你可以找到 class 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]; } }}
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)); } }); } }}
cocinaFrgment.java(在里面你可以找到一个viewHolder但忽略它)。
public class cocinaFragment 扩展片段 {
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;
}
}
您的 activity 必须实现该接口并执行相应的操作,例如调用片段的方法来获取数据。当您拥有数据时,您可以将其作为参数或其他方式传递给新片段。
当您在 android studio 中创建一个空白片段时,它会默认将该结构放在 class 上。新建一个空白片段,看一下。