有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何更新片段中的recyclerView

我使用选项卡式浏览,它包含两个选项卡,每个选项卡都显示一个recyclerView,但在其中一个选项卡中,我将其作为收藏夹,在另一个选项卡中,我将其从收藏夹中删除。当用户从一个选项卡转到另一个选项卡时,如何更新列表

餐厅碎片。爪哇

package com.curso安卓.testegit.Fragment;

import 安卓.content.Intent;
import 安卓.os.Bundle;
import 安卓.view.LayoutInflater;
import 安卓.view.Menu;
import 安卓.view.MenuInflater;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.LinearLayout;
import 安卓.widget.SearchView;
import 安卓.widget.Toast;

import 安卓x.annotation.NonNull;
import 安卓x.annotation.Nullable;
import 安卓x.appcompat.app.AlertDialog;
import 安卓x.fragment.app.Fragment;
import 安卓x.recyclerview.widget.DefaultItemAnimator;
import 安卓x.recyclerview.widget.DividerItemDecoration;
import 安卓x.recyclerview.widget.LinearLayoutManager;
import 安卓x.recyclerview.widget.RecyclerView;

import com.curso安卓.testegit.Adapter.RestauranteAdapter;
import com.curso安卓.testegit.Helper.RestauranteDAO;
import com.curso安卓.testegit.Model.Restaurante;
import com.curso安卓.testegit.R;
import com.curso安卓.testegit.activity.AddRestauranteActivity;
import com.curso安卓.testegit.databinding.FragmentRestauranteBinding;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;

import static 安卓.app.Activity.RESULT_OK;

public class RestauranteFragment extends Fragment implements RestauranteAdapter.OnRestauranteAdapterClick {

    private final static int REQUEST_CODE_ACTIVITY = 1;
    private final List<Restaurante> listaRestaurantes = new ArrayList<>();
    private FragmentRestauranteBinding bind;

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

    @Override
    public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        bind = FragmentRestauranteBinding.inflate(inflater, container, false);

        setupRecyclerView();
        initViewListeners();

        return bind.getRoot();
    }

    @Override
    public void setTargetFragment(@Nullable Fragment fragment, int requestCode) {


        super.setTargetFragment(fragment, requestCode);
    }

    @Override
    public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
        inflater.inflate(R.menu.menu_principal, menu);

        MenuItem searchItem = menu.findItem(R.id.itemPesquisar);
        SearchView searchView = (SearchView) searchItem.getActionView();
        searchView.setQueryHint("Pesquisar restaurantes");

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                RestauranteAdapter adapter = (RestauranteAdapter) bind.recyclerView.getAdapter();

                if (adapter != null) {
                    adapter.getFilter().filter(s);
                }

                return true;
            }
        });
        super.onCreateOptionsMenu(menu, inflater);
    }

    private void editarItemRecycler(int position) {
        //recuperar restaurante para edicao
        Restaurante restauranteSelecionado = listaRestaurantes.get(position);

        Intent intent = new Intent(getContext(), AddRestauranteActivity.class);
        intent.putExtra("Restaurante Selecionado", restauranteSelecionado);

        startActivityForResult(intent, REQUEST_CODE_ACTIVITY);
    }

    private boolean deleteItemToRecycler(int position) {
        String exluirRestauranteMessage = getResources().getString(R.string.deseja_excluir_restaurante);
        Restaurante restauranteSelecionado = listaRestaurantes.get(position);

        AlertDialog.Builder dialog = null;

        if (getContext() != null) {
            dialog = new AlertDialog.Builder(getContext());
        }


        assert dialog != null;
        dialog.setTitle(R.string.confirmar_exclusao);
        dialog.setTitle(R.string.confirmar_exclusao);
        dialog.setMessage(exluirRestauranteMessage + ": " + restauranteSelecionado.getNome() + " ?");

        dialog.setPositiveButton("Sim", (dialogInterface, i) -> {
            RestauranteDAO restauranteDAO = new RestauranteDAO(getContext());
            if (restauranteDAO.deletar(restauranteSelecionado)) {
                RestauranteAdapter adapter = (RestauranteAdapter) bind.recyclerView.getAdapter();

                if (adapter != null) {
                    adapter.notifyItemRemoved(position);
                    popularLista();
                }

                Toast.makeText(getContext(), R.string.sucesso_excluir_restaurante, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getContext(), R.string.erro_excluir_restaurante, Toast.LENGTH_SHORT).show();
            }
        });

        dialog.setNegativeButton(R.string.nao_dialog, null);
        dialog.show();
        return false;
    }

    private void initViewListeners() {
        bind.fab.setOnClickListener(view -> adicionarRestaurante());
    }

    private void setupRecyclerView() {

        //Carrega elementos do banco
        popularLista();

        //Configurar adapter
        RestauranteAdapter restauranteAdapter = new RestauranteAdapter(listaRestaurantes, this);

        //Configurar recyclerView
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
        bind.recyclerView.setLayoutManager(layoutManager);
        bind.recyclerView.setHasFixedSize(true); // performance

        if (getContext() != null) {
            bind.recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayout.VERTICAL)); // add um divisor
        }

        bind.recyclerView.setItemAnimator(new DefaultItemAnimator());
        bind.recyclerView.setAdapter(restauranteAdapter);
    }

    private void adicionarRestaurante() {
        startActivityForResult(new Intent(getContext(), AddRestauranteActivity.class), REQUEST_CODE_ACTIVITY);
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_CODE_ACTIVITY && resultCode == RESULT_OK) {
            RestauranteAdapter adapter = (RestauranteAdapter) bind.recyclerView.getAdapter();

            if (adapter != null) {
                popularLista();
                adapter.notifyDataSetChanged();
            }

        }
    }

    private void popularLista() {
        RestauranteDAO restauranteDAO = new RestauranteDAO(getContext());
        listaRestaurantes.clear();
        listaRestaurantes.addAll(restauranteDAO.listar());
    }

    @Override
    public View.OnClickListener onRestauranteClickEdit(int position) {
        return view -> editarItemRecycler(position);
    }

    @Override
    public View.OnClickListener onRestauranteClickFavorito(int position) {
        return view -> {
            RestauranteDAO restauranteDAO = new RestauranteDAO(getContext());
            RestauranteAdapter adapter = (RestauranteAdapter) bind.recyclerView.getAdapter();
            Restaurante restaurante = listaRestaurantes.get(position);
            restaurante.setFavorito(true);
            if (restauranteDAO.atualizar(restaurante)) {
                popularLista();
                Toast.makeText(getContext(), "Adicionado aos favoritos", Toast.LENGTH_SHORT).show();
                adapter.notifyDataSetChanged();
            }
        };
    }

    @Override
    public View.OnLongClickListener onRestauranteLongClickDelete(int position) {
        return view -> deleteItemToRecycler(position);
    }
}

偏爱碎片。爪哇

package com.curso安卓.testegit.Fragment;

import 安卓.os.Bundle;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.widget.LinearLayout;
import 安卓.widget.Toast;

import 安卓x.fragment.app.Fragment;
import 安卓x.recyclerview.widget.DefaultItemAnimator;
import 安卓x.recyclerview.widget.DividerItemDecoration;
import 安卓x.recyclerview.widget.LinearLayoutManager;
import 安卓x.recyclerview.widget.RecyclerView;

import com.curso安卓.testegit.Adapter.FavoritosAdapter;
import com.curso安卓.testegit.Helper.RestauranteDAO;
import com.curso安卓.testegit.Model.Restaurante;
import com.curso安卓.testegit.databinding.FragmentFavoritosBinding;

import java.util.ArrayList;
import java.util.List;

public class FavoritosFragment extends Fragment implements FavoritosAdapter.OnFavoritosClick {

    private final List<Restaurante> listaRestaurantes = new ArrayList<>();
    private FragmentFavoritosBinding bind;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        bind = FragmentFavoritosBinding.inflate(inflater, container, false);
        setHasOptionsMenu(true);

        initRecyclerView();

        return bind.getRoot();
    }


    public void initRecyclerView() {
        popularLista();

        FavoritosAdapter adapter = new FavoritosAdapter(listaRestaurantes, this);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext());
        bind.recyclerViewFav.setLayoutManager(layoutManager);
        bind.recyclerViewFav.setHasFixedSize(true);

        if(getContext() != null){
            bind.recyclerViewFav.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayout.VERTICAL));
        }

        bind.recyclerViewFav.setItemAnimator(new DefaultItemAnimator());
        bind.recyclerViewFav.setAdapter(adapter);
    }

    private void popularLista() {
        RestauranteDAO restauranteDAO = new RestauranteDAO(getContext());
        listaRestaurantes.clear();
        listaRestaurantes.addAll(restauranteDAO.buscarFavoritos());
    }

    @Override
    public View.OnClickListener removeItemFavorite(int position) {
        return view -> {
            FavoritosAdapter adapter = (FavoritosAdapter) bind.recyclerViewFav.getAdapter();
              RestauranteDAO restauranteDAO = new RestauranteDAO(getContext());
              Restaurante restauranteDesfavoritado;
              restauranteDesfavoritado = listaRestaurantes.get(position);
              restauranteDesfavoritado.setFavorito(false);
              if(restauranteDAO.atualizar(restauranteDesfavoritado)){
                  Toast.makeText(getContext(), "O Restaurante: " + restauranteDesfavoritado.getNome() + "Foi Removido dos favoritos", Toast.LENGTH_LONG).show();
                  adapter.notifyItemRemoved(position);
                  popularLista();
              }

        };
    }
}

主要活动。爪哇

package com.curso安卓.testegit.activity;

import 安卓.os.Bundle;

import 安卓x.appcompat.app.AppCompatActivity;

import com.curso安卓.testegit.Adapter.ViewPagerAdapter;
import com.curso安卓.testegit.Fragment.FavoritosFragment;
import com.curso安卓.testegit.Fragment.RestauranteFragment;
import com.curso安卓.testegit.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding bind = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(bind.getRoot());

        if (getSupportActionBar() != null) {
            getSupportActionBar().setTitle("RESTAURANTE MARCAO");
        }

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new RestauranteFragment(), "Restaurantes");
        adapter.addFragment(new FavoritosFragment(), "Favoritos");
        bind.viewPager.setAdapter(adapter);
        bind.tabs.setupWithViewPager(bind.viewPager);
    }
}

上面是2段代码和我的主代码。如上所述,我希望在幻灯片中更新此列表。多谢各位


共 (1) 个答案

  1. # 1 楼答案

    我建议您在activity中使用两个列表,并在每个名为updateList()的片段中创建两个方法,其中一个将元素列表作为参数

    因此,一旦您从第一个选项卡的列表中删除一个项目,您就可以通过activity通知第二个选项卡的RecyclerView中的更改。您可以对添加新项执行相同的操作