Update fragment after clicking button

Asked

Viewed 73 times

0

I have a Fragment called Fragmentopedidos with a button that adds a new item to a Recycleview, and this Recycleview is in a separate class: Adapterhistorico.java. Each item in this Recycleview has an edit button that opens a Alertdialog in which I edit the item, and after completing the edit I wanted the fragment to update or the Asynctask class that is in Fragmentopedidos to be called again, the same as when I click the remove button.

Inside the Fragment Fragmentopedidos I can give a refresh so:

FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.detach(FragmentoPedidos.this).attach(FragmentoPedidos.this).commit();

But how do I do the same inside the Ordering Adapter?

Code of Fragmentopedidos:

public class FragmentoPedidos extends Fragment   {

private static final String TAG = MainActivity.class.getSimpleName();
private String Cliente;
private String Endereco;
private Double Total;
private List Conteudo;
private ArrayList<Produtos> ClienteInfo=new ArrayList<>();
private SqliteDatabase mDatabase;
private ArrayList<Produtos> todosProdutos=new ArrayList<>();
private AdapterPedido mAdapter;



@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    setHasOptionsMenu(true);

    View v = inflater.inflate(R.layout.fragmento_pedidos, container, false);
    RecyclerView contactView = (RecyclerView)v.findViewById(R.id.product_list);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    contactView.setLayoutManager(linearLayoutManager);
    contactView.setHasFixedSize(true);
    mDatabase = new SqliteDatabase(getActivity());
    todosProdutos = mDatabase.listaProdutos();
    ClienteInfo = mDatabase.getClienteInfo();
    Cliente = mDatabase.getCliente();
    Endereco = mDatabase.getEndereco();
    Total = mDatabase.getTotal();
    Conteudo =  mDatabase.getInfo();

    if(todosProdutos.size() > 0 || ClienteInfo.size() > 0){
        contactView.setVisibility(View.VISIBLE);
        mAdapter = new AdapterPedido(getActivity(), todosProdutos);
        contactView.setAdapter(mAdapter);

        final TextView txtTotal = (TextView)v.findViewById(R.id.tvPedidoTotal);


        String formatado = myFormat(new BigDecimal(Total));

      if(formatado.contains(".00")){
          String formatado1 = formatado.replace(".00","");

          txtTotal.setText("R$ " + formatado1);
      }else {


          txtTotal.setText("R$ " + formatado);

      }

        final EditText campoCliente = (EditText)v.findViewById(R.id.etCliente);
        final EditText campoEndereco = (EditText)v.findViewById(R.id.etEndereco);

        campoCliente.setText(Cliente);
        campoEndereco.setText(Endereco);


    }else{
        contactView.setVisibility(View.GONE);
        Toast.makeText(getActivity(), "Não há nenhum pedido em andamento.", Toast.LENGTH_SHORT).show();
    }
    FloatingActionButton addProd = (FloatingActionButton) v.findViewById(R.id.addProd);
    FloatingActionButton enviPed = (FloatingActionButton) v.findViewById(R.id.enviPed);


    final EditText campoCliente = (EditText)v.findViewById(R.id.etCliente);
    final EditText campoEndereco = (EditText)v.findViewById(R.id.etEndereco);


    addProd.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            final String cliente = campoCliente.getText().toString();
            final String endereco = campoEndereco.getText().toString();

            if(cliente.matches("")){
                DynamicToast.makeError(getActivity(), "Preencha o nome do cliente!").show();
            }else if(endereco.matches("")){
                DynamicToast.makeError(getActivity(), "Preencha o endereço do cliente!").show();
            }else {

                if (ClienteInfo.size() > 0) {

                    Produtos updt_cliente_info = new Produtos(cliente, endereco);
                    mDatabase.updateCli_End(updt_cliente_info);

                }else{

                    Produtos add_cliente_info = new Produtos(cliente, endereco);
                    mDatabase.addCli_End(add_cliente_info);

                }
                addTaskDialog();
            }
        }
    });

    enviPed.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            final String cliente = campoCliente.getText().toString();
            final String endereco = campoEndereco.getText().toString();


            final String pedido_cliente = Cliente;
            final String pedido_endereco = Endereco;
            final List pedido_conteudo1 = Conteudo;

            String pedido_conteudo = String.valueOf(pedido_conteudo1);

            if(todosProdutos.size() > 0 || ClienteInfo.size() > 0) {

                String formatado = myFormat(new BigDecimal(Total));

                if(formatado.contains(".00")){

                    String formatado1 = formatado.replace(".00","");
                    new ServiceLogin().execute(pedido_cliente, pedido_endereco, pedido_conteudo, formatado1);
                    mDatabase.deletardb();
                    RefreshFragment();
                    DynamicToast.makeSuccess(getActivity(), "Pedido criado com sucesso", Toast.LENGTH_LONG).show();
                }else {

                    new ServiceLogin().execute(pedido_cliente, pedido_endereco, pedido_conteudo, formatado);
                    mDatabase.deletardb();
                    RefreshFragment();
                    DynamicToast.makeSuccess(getActivity(), "Pedido criado com sucesso", Toast.LENGTH_LONG).show();
                }

            }else if(cliente.matches("")){

                    DynamicToast.makeError(getActivity(), "Preencha o nome do cliente!").show();

                }else if(endereco.matches("")){

                    DynamicToast.makeError(getActivity(), "Preencha o endereço do cliente!").show();

            }else if(todosProdutos.size() <= 0) {

                DynamicToast.makeError(getActivity(), "Adicione pelo menos um produto ao pedido!").show();

            }
        }
    });


    return v;
}

public void RefreshFragment() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.detach(FragmentoPedidos.this).attach(FragmentoPedidos.this).commit();

}

private class ServiceLogin extends AsyncTask<String, Void, String> {

    ProgressDialog mProgressDialog;
    private String res;

    @Override
    protected void onPreExecute() {
        mProgressDialog = ProgressDialog.show(getActivity(),
                "", "Aguarde...");
    }

    @Override
    protected String doInBackground(String... params) {
        res = null;
        PutUtility put = new PutUtility();

        put.setParam("pedido_cliente", params[0].toString());
        put.setParam("pedido_endereco", params[1].toString());
        put.setParam("pedido_conteudo", params[2].toString());
        put.setParam("pedido_total", params[3].toString());

        try {
            res = put.postData("http://10.0.2.2/cadjobel/public/novo-pedido-app.php");
            Log.v("res", res);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;

    }

    protected void onPostExecute(String res) {
        mProgressDialog.dismiss();

    }
}

public static boolean isInteger(BigDecimal bigDecimal) {
    int intVal = bigDecimal.intValue();
    return bigDecimal.compareTo(new BigDecimal(intVal)) == 0;
}

public static String myFormat(BigDecimal bigDecimal) {
    String formatPattern = isInteger(bigDecimal) ? "#,##0" : "#,##0.00";
    return new DecimalFormat(formatPattern).format(bigDecimal);
}


private void addTaskDialog(){

    LayoutInflater inflater = LayoutInflater.from(getActivity());
    View subView = inflater.inflate(R.layout.layout_adc_produto, null);
    new AsyncFetch(getActivity(), subView).execute();


    final EditText campoNome = (EditText)subView.findViewById(R.id.tvProduto_Nome);
    final EditText campoQuantidade = (EditText)subView.findViewById(R.id.etProduto_Quantidade);
    final EditText campoPreco = (EditText)subView.findViewById(R.id.tvProduto_Preco);


    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle("Adicionar produto ao pedido");
    builder.setView(subView);
    builder.create();

    builder.setPositiveButton("ADICIONAR", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            final String nome = campoNome.getText().toString();
            final String quantidade1 = campoQuantidade.getText().toString();
            final int quantidade = Integer.parseInt(campoQuantidade.getText().toString());
            final String preco1 = campoPreco.getText().toString();
            final double preco = Float.parseFloat(campoPreco.getText().toString());


            if(TextUtils.isEmpty(quantidade1)){
                DynamicToast.makeError(getActivity(), "Digite a quantidade do produto").show();
            }else if(TextUtils.isEmpty(nome)){
                DynamicToast.makeError(getActivity(), "Digite o nome do produto").show();
            }else if(TextUtils.isEmpty(preco1)){
                DynamicToast.makeError(getActivity(), "Digite o preço do produto").show();
            }
            else{

                    Produtos novoProduto = new Produtos(nome, quantidade, preco);
                    mDatabase.addContacts(novoProduto);

                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.detach(FragmentoPedidos.this).attach(FragmentoPedidos.this).commit();
            }
        }
    });

    builder.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(getActivity(), "Operação cancelada", Toast.LENGTH_LONG).show();
        }
    });
    builder.show();
}


    @Override
public void onDestroy() {
    super.onDestroy();
    if(mDatabase != null){
        mDatabase.close();
    }
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);
    MenuItem searchItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) searchItem.getActionView();
    search(searchView);
    searchView.setQueryHint("Procurar no pedido...");

    super.onCreateOptionsMenu(menu, inflater);
}


private void search(SearchView searchView) {

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            if (mAdapter!=null)
                mAdapter.getFilter().filter(newText);
            return true;
        }
    });
}



// Create class AsyncFetch
private class AsyncFetch extends AsyncTask<String, String, String> {
    private String result;
    private Context mContext;
    private View rootView;
    ProgressDialog pdLoading = new ProgressDialog(getActivity());

    public AsyncFetch(Context context, View rootView){
        this.mContext=context;
        this.rootView=rootView;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        //this method will be running on UI thread
        pdLoading.setMessage("\tCarregando...");
        pdLoading.setCancelable(false);
        pdLoading.show();

    }

    @Override
    protected String doInBackground(String... params) {
        result = null;
        PutUtility put = new PutUtility();
        try {
            result = put.postData("http://10.0.2.2/cadjobel/public/autocomplete-app.php");

           /* put.setParam("UserId", params[0].toString());
            put.setParam("Latitude", params[1].toString());
            put.setParam("Longitude", params[2].toString());
            put.setParam("DateTime", params[3].toString()); */

            Log.v("result", result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;

    }

    @Override
    protected void onPostExecute(String result) {
        //this method will be running on UI thread
        //ArrayList<String> dataList = new ArrayList<String>();
        List<String> dataList=new ArrayList<>();
        pdLoading.dismiss();


        if(result.equals("no rows")) {

            // Do some action if no data from database

        }else{

            try {

                JSONArray jArray = new JSONArray(result);

                // Extract data from json and store into ArrayList
                for (int i = 0; i < jArray.length(); i++) {
                    JSONObject json_data = jArray.getJSONObject(i);
                    dataList.add(json_data.getString("produto_nome"));
                }

                final AutoCompleteTextView text = (AutoCompleteTextView)
                        rootView.findViewById(R.id.tvProduto_Nome);

                ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
                        (mContext.getApplicationContext(), android.R.layout.simple_spinner_item, dataList);

                dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                text.setThreshold(1);
                text.setAdapter(dataAdapter);

            } catch (JSONException e) {
                // You to understand what actually error is and handle it appropriately
                DynamicToast.makeError(getActivity(), e.toString()).show();
                DynamicToast.makeError(getActivity(), result.toString()).show();
            }

        }

    }

}}

Code of the requested Adapter:

public class AdapterPedido extends RecyclerView.Adapter<ViewHolderPedido> implements Filterable{

private Context context;
private ArrayList<Produtos> listaProdutos;
private ArrayList<Produtos> mArrayList;

private SqliteDatabase mDatabase;

public AdapterPedido(Context context, ArrayList<Produtos> listaProdutos) {
    this.context = context;
    this.listaProdutos = listaProdutos;
    this.mArrayList=listaProdutos;
    mDatabase = new SqliteDatabase(context);
}

@Override
public ViewHolderPedido onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_lista_produtos, parent, false);
    return new ViewHolderPedido(view);
}

public static boolean isInteger(BigDecimal bigDecimal) {
    int intVal = bigDecimal.intValue();
    return bigDecimal.compareTo(new BigDecimal(intVal)) == 0;
}

public static String myFormat(BigDecimal bigDecimal) {
    String formatPattern = isInteger(bigDecimal) ? "#,##0" : "#,##0.00";
    return new DecimalFormat(formatPattern).format(bigDecimal);
}

@Override
public void onBindViewHolder(ViewHolderPedido holder, int position) {
    final Produtos produtos = listaProdutos.get(position);

    holder.pNome.setText(produtos.getNome());
    holder.pQtd.setText(String.valueOf(produtos.getQtd()));

    final int quantidade = Integer.parseInt(String.valueOf(produtos.getQtd()));

    double preco = produtos.getPreco();
    double precox = quantidade * preco;
    String formatado = myFormat(new BigDecimal(precox));

    if(formatado.contains(".00")){
        String formatado1 = formatado.replace(".00","");

        holder.pPrecox.setText("R$ " + formatado1);
    }else {


        holder.pPrecox.setText("R$ " + formatado);

    }



    holder.edtProduto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            editTaskDialog(produtos);
        }
    });

    holder.delProduto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //delete row from database

            mDatabase.deleteContact(produtos.getId());

        }
    });
}


@Override
public Filter getFilter() {

    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence) {

            String charString = charSequence.toString();

            if (charString.isEmpty()) {

                listaProdutos = mArrayList;
            } else {

                ArrayList<Produtos> filteredList = new ArrayList<>();

                for (Produtos produtos : mArrayList) {

                    if (produtos.getNome().toLowerCase().contains(charString)) {

                        filteredList.add(produtos);
                    }
                }

                listaProdutos = filteredList;
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = listaProdutos;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
            listaProdutos = (ArrayList<Produtos>) filterResults.values;
            notifyDataSetChanged();
        }
    };
}



@Override
public int getItemCount() {
    return listaProdutos.size();
}


private void editTaskDialog(final Produtos produtos){
    LayoutInflater inflater = LayoutInflater.from(context);
    View subView = inflater.inflate(R.layout.layout_adc_produto, null);

    final EditText campoNome = (EditText)subView.findViewById(R.id.tvProduto_Nome);
    final EditText campoQtd = (EditText)subView.findViewById(R.id.etProduto_Quantidade);
    final EditText campoPreco = (EditText)subView.findViewById(R.id.tvProduto_Preco);

    if(produtos != null){
        campoNome.setText(produtos.getNome());
        campoQtd.setText(String.valueOf(produtos.getQtd()));


        String formatado = myFormat(new BigDecimal(produtos.getPreco()));
        if(formatado.contains(".00")){
            String formatado1 = formatado.replace(".00","");
            campoPreco.setText(formatado1);
        }else {
            campoPreco.setText(formatado);

        }

    }

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Editar produto");
    builder.setView(subView);
    builder.create();

    builder.setPositiveButton("SALVAR", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            final String nome = campoNome.getText().toString();
            final int quantidade = Integer.parseInt(campoQtd.getText().toString());
            final double preco = Float.parseFloat(campoPreco.getText().toString());
            if(TextUtils.isEmpty(nome)){
                Toast.makeText(context, "Algo está errado. Cheque os dados digitados.", Toast.LENGTH_LONG).show();
            }
            else{

                    mDatabase.updateContacts(new Produtos(produtos.getId(), nome, quantidade, preco));

            }
        }
    });

    builder.setNegativeButton("CANCELAR", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(context, "Operação cancelada.", Toast.LENGTH_LONG).show();
        }
    });
    builder.show();
}}

This part I want Fragment to update

builder.setPositiveButton("SALVAR", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        final String nome = campoNome.getText().toString();
        final int quantidade = Integer.parseInt(campoQtd.getText().toString());
        final double preco = Float.parseFloat(campoPreco.getText().toString());
        if(TextUtils.isEmpty(nome)){
            Toast.makeText(context, "Algo está errado. Cheque os dados digitados.", Toast.LENGTH_LONG).show();
        }
        else{

                mDatabase.updateContacts(new Produtos(produtos.getId(), nome, quantidade, preco));
              //atualizar fragmento aqui

        }
    }
});

Requested fragment:

Imagem do fragmento

  • Hello, John! You don’t need to call FragmentTransaction. After sending the data to the Adapter, just call mSeuAdapter.notifyDataSetChanged();

  • I added mAdapter..notifyDataSetChanged(); just below mDatabase.addContacts(novoProduto);, which is when the data is sent to the database, and gave a crash Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged()' on a null object reference... I also added this line in the part where a new item is added to the list but nothing happens.

  • I had already tried this method to update Recycleview but did not succeed, so I went to the premise that I needed to update the fragment at once.

  • And it also has the total part, which is outside of Recycleview and needs to be synchronized with the Recycleview items, so I think anyway the whole fragment needs to update.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.