georginos1989 Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 Εχω κανει ενα listview και για κάθε γραμή του listview εχω ενα xml το οποιο εχει 2 editText και 2 buttons. Ξερω πως να γεμιζω το listview Το θέμα ειναι το πως θα ξέρω ποιο κουμπι και σε ποια γραμμη πατηθηκε το κουμπι ώστε να μεταβαλω τα editText της αντιστοιχης γραμμης στην οποια πατηθηκε το κουμπι
warlock9_0 Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 http://developer.android.com/training/basics/firstapp/starting-activity.html θα βάλεις στο κουμπί on click και θα γράψεις τη συνάρτηση που αλλάζει το text
nilosgr Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 Για δες εδω: http://stackoverflow...t-selected-item http://developer.and...g-activity.html Το λινκ ειναι ασχετο οσο αναφορα την ερωτηση...
warlock9_0 Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 όντως, τώρα που ξαναδάβασα την ερώτηση το κατάλαβα νόμιζα οτι έχει μόνο δύο κουμπιά και δύο text
georginos1989 Δημοσ. 12 Σεπτεμβρίου 2012 Μέλος Δημοσ. 12 Σεπτεμβρίου 2012 Για δες εδω: http://stackoverflow...t-selected-item Το λινκ ειναι ασχετο οσο αναφορα την ερωτηση... Το είχα δει αυτό αλλά δεν μπορώ να το κάνω να δουλέψει. Δεν καταλαβαίνει ότι πατάω κάπου δλδ σε κάποιο στοιχεία του listview
Directx Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 Το πρόβλημα είναι πονηρό, αν κατάλαβα τι θέλεις να κάνεις.. βάλε έναν κωδικό ξεχωριστό για κάθε πλήκτρο μέσο των Tag functions που προσφέρουν όλα τα View και ύστερα στο Click Event σου ξεχώρισε ποίο πλήκτρο πάτησε ο χρήστης με βάση το περιεχόμενο αυτό.
georginos1989 Δημοσ. 12 Σεπτεμβρίου 2012 Μέλος Δημοσ. 12 Σεπτεμβρίου 2012 Ναι κάτι τέτοιο μάλλον θα βοηθούσε. Απλά λογικά θα πρέπει να βάλω και tags στα EditText ώστε να μπορώ να αλλάζω το editText που θέλω σωστα? Επίσης τα tags θα μπαίνουν πριν προστεθεί η κάθε γραμμη στο listview σωστα?
warlock9_0 Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 αυτό? http://androidforbeginners.blogspot.gr/2010/03/clicking-buttons-in-listview-row.html
Directx Δημοσ. 12 Σεπτεμβρίου 2012 Δημοσ. 12 Σεπτεμβρίου 2012 Ναι κάτι τέτοιο μάλλον θα βοηθούσε. Απλά λογικά θα πρέπει να βάλω και tags στα EditText ώστε να μπορώ να αλλάζω το editText που θέλω σωστα? Επίσης τα tags θα μπαίνουν πριν προστεθεί η κάθε γραμμη στο listview σωστα? Ναι, η φιλοσοφία είναι να πακετάρουμε στο Tag των control μας όσες πληροφορίες μας είναι χρήσιμες ώστε να εντοπίζουμε όσο το δυνατόν πιο εύκολα (μέσο των κατάλληλων Event Handlers / Listeners) και σίγουρα σε ποία θέση εντός των εσωτερικών μας δομών δεδομένων αναφέρεται κάθε στιγμή το control, ανεξαρτήτως της θέσεως του στο ListView μας. Τα tags ορίζονται κατά το .getView του BaseAdapter που χρησιμοποιούμε και συσχετίζονται (λογικά) με το προβαλλόμενο position των δεδομένων που παρουσιάζουμε.
georginos1989 Δημοσ. 13 Σεπτεμβρίου 2012 Μέλος Δημοσ. 13 Σεπτεμβρίου 2012 Thanks DirextX αλλά εχω μπερδευτει λίγο. Μηπως μπορεις να δωσεις ενα παραδειγμα το πως μπορουμε να βαλουμε tag στα αντικειμενα της κάθε γραμμης του listview? Μπερδευομαι αρχικα στο getView Που λες πχ εχω αυτον τον κωδικα String[] from = new String[] {"itemName", "itemNumber"}; int[] to = new int[] { R.id.etCartRowItemName, R.id.etCartRowItemNumber }; List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map = new HashMap<String, String>(); map.put("itemName", "item1"); map.put("itemNumber", "10"); fillMaps.add(map); map.put("itemName", "item1"); map.put("itemNumber", "10"); fillMaps.add(map); adapter = new SimpleAdapter(this, fillMaps, R.layout.cart_item_grid, from, to); cartList.setAdapter(adapter); και εκτος απο το itemname και Itemnymber εχω και 2 κουμπια σε καθε γραμμη ωστε να αυξανω/μειωνω το itemnumber που θα πρεπει να μπουν τα tags?
nilosgr Δημοσ. 13 Σεπτεμβρίου 2012 Δημοσ. 13 Σεπτεμβρίου 2012 Ετσι οπως το βλεπω, πρεπει να κανεις εναν δικο σου Adapter, πχ >public class MyTagAdapter extends SimpleAdapter ωστε να κανεις Override τις μεθοδους που μπαινουν τα στοιχεια στο ListView και να τα βαζεις tag
Directx Δημοσ. 13 Σεπτεμβρίου 2012 Δημοσ. 13 Σεπτεμβρίου 2012 Thanks DirextX αλλά εχω μπερδευτει λίγο. Μηπως μπορεις να δωσεις ενα παραδειγμα το πως μπορουμε να βαλουμε tag στα αντικειμενα της κάθε γραμμης του listview? Μπερδευομαι αρχικα στο getView Που λες πχ εχω αυτον τον κωδικα String[] from = new String[] {"itemName", "itemNumber"}; int[] to = new int[] { R.id.etCartRowItemName, R.id.etCartRowItemNumber }; List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map = new HashMap<String, String>(); map.put("itemName", "item1"); map.put("itemNumber", "10"); fillMaps.add(map); map.put("itemName", "item1"); map.put("itemNumber", "10"); fillMaps.add(map); adapter = new SimpleAdapter(this, fillMaps, R.layout.cart_item_grid, from, to); cartList.setAdapter(adapter); και εκτος απο το itemname και Itemnymber εχω και 2 κουμπια σε καθε γραμμη ωστε να αυξανω/μειωνω το itemnumber που θα πρεπει να μπουν τα tags? Ακολουθεί ένα μικρό πρόγραμμα που παρουσιάζει έναν τρόπο επίλυσης του προβλήματος με την χρήση του Tag που προσφέρουν τα View του Android. Το πρόγραμμα έρχεται σε 2 τμήματα, το πρώτο είναι ο κώδικας για το Activity και το δεύτερο ο κώδικας για το BaseAdapter που αναλαμβάνει την παρουσίαση και την διαχείρηση των περιεχομένων του ListView. Ο κώδικας για την κατασκευή του UI (2 επιπλέον αρχεία) παραλείπεται καθώς τον θεωρώ τετριμμένο. > import java.util.HashMap; import java.util.Vector; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class ListviewbuttonsActivity extends Activity { Vector<HashMap<String, String>> HashList; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create a dummy HashList with 20 bogus data HashList = new Vector<HashMap<String, String>>(); for(int Item = 0; Item < 20; Item++) { HashMap<String, String> HashData = new HashMap<String, String>(); HashData.put("itemName", String.format("item%d", Item)); HashData.put("itemNumber", "0"); HashList.add(HashData); } // Attach MyListView to "R.id.listView1" UI element and then // set MyListView adapter to my custom one "CMyListAdapter". ListView MyListView = (ListView)findViewById(R.id.listView1); MyListView.setAdapter(new CMyListAdapter(this, MyListView, HashList)); // Force MyListView to update.. MyListView.invalidateViews(); } } > /* * Customized BaseAdapter for a Vector<HashMap<String, String>> container. */ import java.util.HashMap; import java.util.Vector; import android.content.Context; import android.view.View; import android.view.View.onclickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class CMyListAdapter extends BaseAdapter { private Vector<HashMap<String, String>> HashList; private Context AppCon; private ListView Owner; public CMyListAdapter(Context AppCon, ListView Owner, Vector<HashMap<String, String>> HashList) { this.AppCon = AppCon; this.Owner = Owner; this.HashList = HashList; } @Override public int getCount() { return HashList.size(); } @Override public Object getItem(int arg0) { return HashList.get(arg0); } @Override public long getItemId(int position) { return position; } // Our custom getView, it's very lean, no view cache etc. // Not for serious use. @Override public View getView(int position, View convertView, ViewGroup parent) { HashMap<String, String> DataHash = HashList.get(position); View ItemView = null; Button ItemAddButton = null, ItemDecButton = null; EditText ItemNameTextBox = null, ItemValTextBox = null; if(convertView == null) ItemView = View.inflate(AppCon, R.layout.listitems, null); else ItemView = convertView; // - button ItemAddButton = (Button)ItemView.findViewById(R.id.button1); ItemAddButton.setonclickListener(new onclickListener() { @Override public void onclick(View v) { final int ItemPos = (Integer)v.getTag(); HashMap<String, String> HashItem = HashList.get(ItemPos); HashItem.put("itemNumber", Integer.toString(Integer.valueOf(HashItem.get("itemNumber")) - 1)); Owner.invalidateViews(); // !! } }); ItemAddButton.setTag(position); // + button ItemDecButton = (Button)ItemView.findViewById(R.id.Button2); ItemDecButton.setonclickListener(new onclickListener() { @Override public void onclick(View v) { final int ItemPos = (Integer)v.getTag(); HashMap<String, String> HashItem = HashList.get(ItemPos); HashItem.put("itemNumber", Integer.toString(Integer.valueOf(HashItem.get("itemNumber")) + 1)); Owner.invalidateViews(); // !! } }); ItemDecButton.setTag(position); ItemNameTextBox = (EditText)ItemView.findViewById(R.id.editText1); ItemNameTextBox.setText(DataHash.get("itemName")); ItemValTextBox = (EditText)ItemView.findViewById(R.id.editText2); ItemValTextBox.setText(DataHash.get("itemNumber")); return ItemView; } } Εδώ θέλει προσοχή το γεγονός ότι δεν αποθηκεύω σε προσωρινή μνήμη όλα τα View κάθε Item αλλά τα ζητώ μέσο .FindViewById κάθε φορά που χρειάζεται - τούτο πλήττει την ταχύτητα αλλά κρατά τον κώδικα καθαρό για να πάρεις μια ιδέα του πως μπορεί να γίνει. Επίσης δεν λαμβάνω υπόψη μου τι θα γίνει αν ο χρήστης δοκιμάσει να αλλάξει κατευθείαν το περιεχόμενο του EditText και άλλα πιθανά σενάρια χρήσης. Τέλος, δεν είσαι υποχρεωμένος να βασιστείς στον BaseAdapter. Αν όλα πάνε καλά θα έχεις ένα πρόγραμμα του στυλ: http://www.youtube.com/watch?v=kBNnD7RAmy4 Καλή συνέχεια & καλούς πειραματισμούς. Υ.Γ. Φυσικά μπορεί να υπάρχουν bugs ή άλλες αβλεψίες (το πρόγραμμα δοκιμάστηκε σε Android 2.2), διαθέτω ελάχιστο χρόνο αυτή την στιγμή και στο Android τα πράγματα θέλουν (πάντα) προσήλωση & προσοχή.
georginos1989 Δημοσ. 14 Σεπτεμβρίου 2012 Μέλος Δημοσ. 14 Σεπτεμβρίου 2012 Thanks DirectX. Θα δοκιμασω και το δικο σου . Toυ warlock παντως δουλευει. Αλλά πως θα γίνει να κρατάω τα στοιχεία που υπάρχουν μεσα στο listview οταν ανοιγει ενα νεο activity και μετα επιστρεφω παλι στο activity με το καλάθι?
georginos1989 Δημοσ. 17 Σεπτεμβρίου 2012 Μέλος Δημοσ. 17 Σεπτεμβρίου 2012 Οκ βρήκα πως θα γίνει αυτό. Θα τα κραταω προσωρινά σε έναν πινακα στη βάση που θα εχω ωστε να μην υπαρχει περιπτωση να χαθουν. ΠΩς μπορώ να ξέρω τον αριθμο της γραμμης του listview στην οποια γραμμή βρίσκομαι κάθε φορα? Αυτό που θέλω είναι να μπορώ να διαβάσω όλα τα δεδομένα του listview ανα γραμμή
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα