Ok, dentro l'if dell'adapter prova con:
((LinearLayout)findViewById(R.id.layoutarticoli)). setBackgroundResource(R.color.secondo);
Ok, dentro l'if dell'adapter prova con:
((LinearLayout)findViewById(R.id.layoutarticoli)). setBackgroundResource(R.color.secondo);
mi da un errore dicendomi che
LinearLayout cannot be resolved to a type
Hai fatto l'import della classe LinearLayout?
era per quello grazieee....ora ho un problema che mi cambia lo sfondo dell'item sbagliato, cioè non di quello con quantità uguale a zero...molto probabilmente ho un problema sul cursor e sulla posizione che la becca sbagliata....
azzarola non so come fare a passargli la posizione del cursor per settare a quale items far cambiare il colore.....
1
2if(Integer.parseInt(cur.getString( mQtaIndex ))==0){
3
4cur.moveToPosition(posizione);
5((LinearLayout)findViewById(R.id.layoutarticoli)).setBackgroundResource(R.color.primo);
6}
7
facendo così non cambia nulla cioè mi cambia il colore dell'item sbagliato...un'altra cosa che non capisco è come mai il colore non viene subito cambiato ma devo andare con lo scrolling sull'elemento con quantità uguale a zero prima di vedere il colore di sfondo dell'item cambiare....
In teoria l'adapter non lo dovevi piu toccare, dovresti assicurarti che siano giuste le funzioni nell'Activity.
le funzioni dell'activity dovrebbero essere giuste solo che si becca la posizione dell'item a cui cambiare il colore di sfondo a caso e quindi cambia il colore ad un item casuale e non a quello con quantità=0....bhoooooo
Puoi postare la parte di codice dove fai la query al db e anche quella dove dichiari le costanti statiche che si riferiscono al numero della colonna?
Quello che suppongo faccia questo metodo:
db2.fetchProducts2();
db2.fectchproducts2 restituisce il cursor che fa questa query:
81
2//metodo per fare la query di alcuni specificati elementi della tabella articolo e della tabella logspesadb dove prodotti.IDARA=logspesadb.IDARL
3//Con questa query creiamo la lista della spesa vera e propria
4public Cursor fetchProducts2(){
5return mDb.rawQuery("SELECT prodotti._id,logspesadb._id2,prodotti.NOMEAR,prodotti.URIIMG,logspesadb.QUANTITA,logspesadb.IDARL FROM prodotti,logspesadb WHERE prodotti.IDARA=logspesadb.IDARL", null);
6
7}
8
la parte che fa riferimento all'adapter è questa:
71
2// !!query che ci restituisce tutti i prodotti in lista spesa e li passa ad un Cursor!!
3cursore=db2.fetchProducts2();
4startManagingCursor(cursore);
5adaptatore = new MyAdapter(this, cursore);
6productsLv.setAdapter(adaptatore); //la listview ha questo adapter
7
dove la classe MyAdapter è la seguente:
551
2//GESTIONE MYADAPTER
3class MyAdapter extends ResourceCursorAdapter {
4
5// private int mIdIndex;
6private int mNameIndex;
7private int mUriIndex;
8private int mQtaIndex;
9
10
11
12public MyAdapter(Context context, Cursor cur) {
13super(context, R.layout.product, cur);
14
15//mIdIndex = cur.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_ID_KEY);
16mNameIndex = cur.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_NOME_KEY);
17mUriIndex = cur.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_URIIMG_KEY);
18mQtaIndex = cur.getColumnIndex( MyDatabase2.ProductsMetaDataLog.PRODUCT_QUANT_KEY);
19
20}
21
22
23public View newView ( Context context, Cursor cur, ViewGroup parent ) {
24LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
25return li.inflate(R.layout.product, parent, false);
26}
27
28
29public void bindView(View view, Context context, Cursor cur) {
30//TextView idAr = ( TextView ) view.findViewById( R.id.Idar );
31TextView nameAr = ( TextView ) view.findViewById( R.id.Nomear );
32TextView qtaAr = ( TextView ) view.findViewById( R.id.Qtaar );
33ImageView imageAr = (ImageView) view.findViewById(R.id.ImageArticolo);
34
35//idAr.setText( cur.getString( mIdIndex ) );
36nameAr.setText( cur.getString( mNameIndex ) );
37qtaAr.setText( cur.getString( mQtaIndex ) );
38imageAr.setImageURI(Uri.parse(cur.getString( mUriIndex )));
39
40
41if(Integer.parseInt(cur.getString(mQtaIndex))==0){
42
43((LinearLayout)findViewById(R.id.layoutarticoli)).setBackgroundResource(R.color.primo);
44}
45
46
47}
48
49
50
51} //Fine class MyAdapter extends ResourceCursorAdapter
52//FINE GESTIONE MYADAPTER
53
54
55
mentre questa è la parte dove gestisco tutti gli OnClick() sugli elementi sulla listview...il problema è sicuramente sul cursore che becca la posizione sbagliata dell'emento a cui cambiare il colore di sfondo....ad esempio quando una quantità va a zero il colore non cambia...il cursore va sul primo elemento della listview e solo quando vado a scrollare sull'elemento con quantità = 0 mi si cambia il colore di sfondo di un elemento a caso...nel mio caso sempre il terzo elemento della listview...non riesco proprio a capire il perchè...ora ti posto l'ultima parte che ti ho menzionato qua...
Eccola:
771
2AdapterView.OnItemClickListener mItemListener = new OnItemClickListener() {
3public void onItemClick(AdapterView<?> adapter, View v,int pos,long id) {
4
5//String st = "Clicked POS="+pos+" ID="+id;
6//Toast.makeText(getApplicationContext(),st,Toast.LENGTH_SHORT).show();
7
8posizione = pos;
9db2.open();
10Cursor r = db2.fetchProducts2();
11startManagingCursor(r);
12r.moveToPosition(pos);
13adaptatore.notifyDataSetChanged();
14
15int mNameIndex = r.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_NOME_KEY);
16int mUriIndex = r.getColumnIndex( MyDatabase2.ProductsMetaDataArt.PRODUCT_URIIMG_KEY);
17
18ImageView image = new ImageView(activity);
19AlertDialog.Builder builder = new AlertDialog.Builder(activity);
20
21String s = r.getString(mUriIndex).substring(8);
22s=s.replaceAll("%20", " ");
23String myJpgPath = s;
24BitmapFactory.Options options = new BitmapFactory.Options();
25options.inSampleSize = 2;
26Bitmap bm = BitmapFactory.decodeFile(myJpgPath, options);
27image.setImageBitmap(bm); //Sostituisci la tua bitmap
28builder.setTitle("Conferma Acquisto");
29builder.setIcon(R.drawable.carrello);
30builder.setView(image);
31
32
33builder.setNegativeButton("Annulla", new DialogInterface.OnClickListener() {
34public void onClick(DialogInterface dialog, int id) {
35dialog.cancel();
36}
37});
38
39builder.setMessage("Vuoi acquistare una confezione di "+r.getString(mNameIndex)+" ?").setCancelable(false);
40builder.setPositiveButton("Conferma", new DialogInterface.OnClickListener() {
41public void onClick(DialogInterface dialog, int id) {
42
43db2.open();
44Cursor f = db2.fetchProducts2();
45startManagingCursor(f);
46f.moveToPosition(posizione);
47
48int mIdIndex = f.getColumnIndex( MyDatabase2.ProductsMetaDataLog.PRODUCT_ID_KEY);
49int mQtaIndex = f.getColumnIndex( MyDatabase2.ProductsMetaDataLog.PRODUCT_QUANT_KEY);
50
51//Creiamo il progress dialog
52View v = new View(activity);
53manageProgress2(v);
54
55db2.updateQuantita(Integer.parseInt(f.getString(mIdIndex)), Integer.parseInt(f.getString(mQtaIndex))-1);
56boolean b = f.requery();
57Log.i("REQUERY?", String.valueOf(b));
58adaptatore = new MyAdapter(activity,f);
59adaptatore.notifyDataSetChanged();
60((ListView)findViewById(R.id.productsLv)).setAdapter(adaptatore);
61
62db2.close();
63dialog.cancel();
64}
65});
66
67builder.create().show();
68db2.close();
69}
70};
71((ListView)findViewById(R.id.productsLv)).setOnItemClickListener(mItemListener);
72
73
74
75
76db2.close();
77
come alternativa potrei eliminare dalla listview l'elemento con quantità uguale a zero che forse è più comodo e meno dispendioso come difficoltà....tu hai qualche idea di come potrei fare per fare l'operazione di delete dell'item con quantità =0???
ti ringrazio di tutto l'aiuto..ciao
Ultima modifica di sangio85; 10-11-10 alle 12:41