Просмотр с фрагментом - PullRequest
       3

Просмотр с фрагментом

0 голосов
/ 24 сентября 2018

Я новичок в разработке для Android.Я разрабатываю простое приложение, которое читает штрих-код.У меня небольшая проблема с адаптером и фрагментом.

У меня есть класс адаптера и класс фрагмента.В адаптере я использую класс ViewHolder и не могу использовать свою функцию, которая проверяет, был ли отсканирован штрих-код, и добавляет элемент (если штрих-код действителен) в другой список.

Мой класс адаптера имеет следующий код:

 private Context context;   

List<ProdottiList> mItems;
public static int mCaller;                  
public static int IDDocumento;             
public static TBLSOGGETTI mSoggetto;      
public static int mAvanzamentoDoc;         

public static int AdapterMode = MethodsProducts.kAdapterModeList; 

public static ProductsAdapter savedAdapter;  

private static ListView mListView;
public static int IDProdotto = 0;
public static int myPosition = 0;
public static ViewHolder holder;           
public static List<OmaggiList> list1;
public static View mProductView;           
public static View finalMProductView1;      
public static DocumentiRigheList row;       

public ProductsAdapter(Context context, int listview_products_item, List<ProdottiList> listProdottiFiltered, int itemMenuCatalog, int textViewResourceId) {
    super(context, textViewResourceId);     


}

public ProductsAdapter(Context context, int resource, List<ProdottiList> items, int caller, int idDocumento, TBLSOGGETTI soggetto, int AvanzamentoDoc, ListView listView) {
    super(context, resource, items);
    this.mItems = items;
    this.context = context;
    this.mCaller = caller;
    this.IDDocumento = idDocumento;
    this.mSoggetto = soggetto;
    this.mAvanzamentoDoc = AvanzamentoDoc;       
    this.mListView = listView;
}

public static void saveAdapter(ProductsAdapter item)
{
    savedAdapter = item;
}

public static class ViewHolder {


    public TextView txtNome;        
    public TextView txtQuantita;      
    public TextView txtTotale;

    public Button btnAggiungiUnitaQuantita;
    public Button btnRimuoviUnitaQuantita; 

    public ImageButton imgCarello;

}

@Override
public View getView(final int position, View convertView, final ViewGroup parent) {

    final MySQLiteManager db = new MySQLiteManager(context);

   mProductView = convertView;

    if (mProductView == null) {


        if (mAvanzamentoDoc == DocumentsFragment.StatoDocumentoBozza)
        {
            mProductView = inflater.inflate(R.layout.listview_products_item_qta, parent, false);
        }
        else
        {
            mProductView = inflater.inflate(R.layout.listview_products_item, parent, false);
        }


        holder = new ViewHolder();       


        holder.txtNome = (TextView) mProductView.findViewById(R.id.txtNome);

        holder.txtQuantita = (TextView) mProductView.findViewById(R.id.txtQuantita);           

        holder.btnAggiungiUnitaQuantita = (Button) mProductView.findViewById(R.id.btnAggiungiUnitaQuantita);
        holder.btnRimuoviUnitaQuantita = (Button) mProductView.findViewById(R.id.btnRimuoviUnitaQuantita);
        holder.btnQuantitaSelezionata = (Button) mProductView.findViewById(R.id.btnQuantitaSelezionata);          

        holder.imgCarello = (ImageButton) mProductView.findViewById(R.id.imgCarello);          

        mProductView.setTag(holder);
    }      

    final ViewHolder viewHolder = (ViewHolder) mProductView.getTag(); //I NEED TO PASS IT

    final ProdottiList product = getItem(position);

    if (product.prodotto != null) {

        final View finalMProductView = mProductView;
        finalMProductView1 = mProductView;

        db.close();


        viewHolder.txtNome.setTag(mProductView);

        viewHolder.txtNome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_APERTO_BOZZA)    
                {) {

                    MethodsProducts.btnAggiungiUnitaQuantitaClick(context, viewHolder.btnAggiungiUnitaQuantita, viewHolder.btnQuantitaSelezionata, position, getItem(position), AdapterMode, savedAdapter, null, mSoggetto, mAvanzamentoDoc, IDDocumento, list);

                    notifyDataSetChanged();
                }
                else if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_MOSTRA_CARRELLO)    //sono nel carrello. Ogni click e una rimozione
                {
                    MethodsProducts.btnRimuoviUnitaQuantitaClick(context, viewHolder.btnAggiungiUnitaQuantita, viewHolder.btnQuantitaSelezionata, position, getItem(position), AdapterMode, savedAdapter, null, mSoggetto, mAvanzamentoDoc, IDDocumento, list);
                }
            }
        });

        viewHolder.btnAggiungiUnitaQuantita.setTag(mProductView);
        viewHolder.btnAggiungiUnitaQuantita.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                MethodsProducts.btnAggiungiUnitaQuantitaClick(context, viewHolder.btnAggiungiUnitaQuantita, viewHolder.btnQuantitaSelezionata, position, getItem(position), AdapterMode, savedAdapter, null, mSoggetto, mAvanzamentoDoc, IDDocumento, list);

                if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_MOSTRA_CARRELLO) {
                    Log.d(ClassName, "btnAggiungiUnitaQuantita.setOnClickListener - Sono nel carrello - chiamo il notifyDataSetChanged()");
                    notifyDataSetChanged();
                }


                if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_APERTO_BOZZA) {
                    if (HomeActivity.agente.getFlagModQtaInCarrello() == 1) {
                        Log.d(ClassName, "btnRimuoviUnitaQuantita.setOnClickListener - Sono nel carrello - chiamo il notifyDataSetChanged()");
                        notifyDataSetChanged();
                    }
                }

            }
        });          
        viewHolder.btnRimuoviUnitaQuantita.setTag(mProductView);
        viewHolder.btnRimuoviUnitaQuantita.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                MethodsProducts.btnRimuoviUnitaQuantitaClick(context, viewHolder.btnAggiungiUnitaQuantita, viewHolder.btnQuantitaSelezionata, position, getItem(position), AdapterMode, savedAdapter, null, mSoggetto, mAvanzamentoDoc, IDDocumento, list);

                if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_MOSTRA_CARRELLO) {

                    notifyDataSetChanged();
                }

                if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_APERTO_BOZZA) {
                    if (HomeActivity.agente.getFlagModQtaInCarrello() == 1) {
                        Log.d(ClassName, "btnRimuoviUnitaQuantita.setOnClickListener - Sono nel carrello - chiamo il notifyDataSetChanged()");
                        notifyDataSetChanged();
                    }
                }
            }
        });          

        MethodsProducts.SettingDetailOrderRow(context, mCaller, mProductView, product, IDDocumento, 1, position, mSoggetto, mAvanzamentoDoc, list);


        new setRowProductAsync(context, mProductView, position, viewHolder, product, mSoggetto, IDDocumento, mAvanzamentoDoc, list, row).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }


    return mProductView;
}

И эта моя функция используется в моем классе фрагментов для создания диалогового окна подтверждения, когда статья найдена, и для ее добавления.Я использую его в «onCreateView»:

  public void OpenConfirmDialog()
{
    if (!ProductsFragment2.getPreviousWindow()) {

        if (_barcode != "") {

            MySQLiteManager db = new MySQLiteManager(getActivity());
            String articleName = db.GetProductDescriptionFromBarcode(_barcode, IDClienteValue);
            String Message = getActivity().getString(R.string.ArticleDetailDialog_txt).replace("[DESCRIZIONE]", articleName);
            final AlertDialog.Builder confermInserimentoDialog = new AlertDialog.Builder(getActivity());
            // confermInserimentoDialog.setView(R.id.layoutConfermaInserimento);
            confermInserimentoDialog.setTitle("Attenzione");
            confermInserimentoDialog.setCancelable(false);
            confermInserimentoDialog.setMessage(Message)

                    .setPositiveButton("Aggiungi", new DialogInterface.OnClickListener() {
                        @Override

                        public void onClick(DialogInterface dialog, int id) {

                            if (mAvanzamentoDoc == ProductsFragment2.k_AVANZAMENTO_DOC_APERTO_BOZZA) {
                                MethodsProducts.btnAggiungiUnitaQuantitaClick(context, viewHolder.btnAggiungiUnitaQuantita, viewHolder.btnQuantitaSelezionata, position, getItem(position), AdapterMode, savedAdapter, null, mSoggetto, mAvanzamentoDoc, IDDocumento, list);
                                Toast.makeText(getActivity(), "Aggiunto", Toast.LENGTH_LONG).show();
                                productsAdapter.Call_notifyDataSetChanged();
                            }
                        }
                    })
                    .setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int id) {
                            Toast.makeText(getActivity(), "Articolo non aggiunto", Toast.LENGTH_LONG).show();
                            dialog.dismiss();
                        }
                    });
            AlertDialog alert = confermInserimentoDialog.create();
            alert.show();

            MethodsProducts.SettingDetailOrderRow(getActivity(),ProductsAdapter.mCaller,ProductsAdapter.mProductView, ProductsAdapter.savedAdapter.getItem(ProductsAdapter.getPosition(_barcode, getActivity())), ProductsAdapter.IDDocumento, 1, ProductsAdapter.myPosition,ProductsAdapter.mSoggetto,ProductsAdapter.mAvanzamentoDoc, null);

            new ProductsAdapter.setRowProductAsync(getActivity(),ProductsAdapter.mProductView, ProductsAdapter.myPosition,ProductsAdapter.holder, ProductsAdapter.savedAdapter.getItem(ProductsAdapter.myPosition),ProductsAdapter.mSoggetto, ProductsAdapter.IDDocumento,ProductsAdapter.mAvanzamentoDoc, null, ProductsAdapter.row).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);



        }
    }
}

Моя цель - создать диалоговое окно подтверждения, в котором, если пользователь нажимает кнопку «Подтвердить», я добавляю штрих-код в заказ.На первом этапе я использовал свой «OpenConfirmDilalog» в методе getView адаптера, но он не работает, потому что мой диалог появляется 9 раз.Метод, который добавляет штрих-код, - «MethodsProducts.AggiungiUnitaQuantita».В основном моя проблема заключается в том, что при сканировании одной и той же статьи приложение не помещает ее в одну и ту же строку с количеством = 2, но в две разные строки, и я хочу, чтобы они были в одной и той же строке.Я вижу, что проблема в передаче виджета.Мне нужно, чтобы код запускался, когда форма открыта.

Извините, если в коде может быть несогласованность, но: а) я новичок в языковой и андроидной студии б) я удалил закомментированный код

Ps: извините за мой английский тоже

Спасибо, если вы мне поможете!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Устранена проблема с удалением параметров ViewHolder и сохранением данных в локальной базе данных и обновлением ListView

0 голосов
/ 24 сентября 2018
notifyDataSetChanged(); 

будет работать только в том случае, если вы изменили данные (this.mItems), но не видите там кодов для изменения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...