Я новичок в разработке для 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: извините за мой английский тоже
Спасибо, если вы мне поможете!