Προς το περιεχόμενο

Android expandable listview setOnChildClickListener


Προτεινόμενες αναρτήσεις

Δημοσ.

Την καλημερα μου σε ολους τους φιλους.Μια μικρη βοηθεια θα ηθελα γιατι εχω κολησει σ ενα σημειο απο χθες κ εχω σπασει το κεφαλι μου.

 

Εχω ενα expandable listview στο οποιο εχουμε το ονομα του χρηστη και απο κατω εναν αριθμο τηλεφωνου.Θελω οταν κανω click πανω στον αριθμο να γινεται τηλεφωνικη κληση.

 

Screen_Shot_2017-05-16_at_8.15.48_AM.png

 

 

 

Απο την MainActivity καλω την setOnChildClickListener

 expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView expandableListView, View clickedView, int groupPosition, int childPosition, long id) {


                if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

                    Intent callIntent = new Intent(Intent.ACTION_CALL);
                    callIntent.setData(Uri.parse("?????")); // Εδω πως θα παρω τα Strings απο το καθε child?
                    startActivity(callIntent);
                }
                     return false;
              }
            });
    }

Nα υποθεσω οτι θα πρεπει να καλεσω την getChildView απο την κλαση μου MyCustomAdapter?

public class MyCustomAdapter extends BaseExpandableListAdapter {

    private Context context;
    private HashMap<String, List<String>> countriesHashMap;
    private List<String> countryList;

    public MyCustomAdapter(Context context,
                           HashMap<String, List<String>> hashMap,
                           List<String> list) {
        countriesHashMap = hashMap;
        this.context = context;
        this.countriesHashMap = hashMap;
        this.countryList = list;
    }

    @Override
    public int getGroupCount() {
        return countriesHashMap.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return countriesHashMap.get(countryList.get(groupPosition)).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return countryList.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return countriesHashMap.get(countryList.get(groupPosition)).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        String groupTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.parent, parent, false);
        }
        TextView parentTextView = (TextView) convertView.findViewById(R.id.textViewParent);
        parentTextView.setText(groupTitle);
        return convertView;
    }

    @Override
    public View getChildView(int groupPosition,
                             int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
        Log.i("test", "parent view: " + parent.getTag());

        String childTitle = (String) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater inflater =
                    (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.child, parent, false);
        }
        TextView childTextView = (TextView) convertView.findViewById(R.id.textViewChild);
        childTextView.setText(childTitle);
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

H να τα παρω κατευθειαν απο την κλαση?


public class MyDataArrays {

    static String[] Iannis   = {"00234564"};
    static String[] kostas   = {"00102024"};
    static String[] Nikos    = {"00992288"};
    static String[] Manolis  = {"00987654"};
    static String[] Stefanos = {"00143748"};
    static String[] Dimitris = {"00989898"};
    static String[] Mpampis  = {"00809066"};
    static String[] Basilis  = {"00111120"};
    static String[] Giorgos  = {"00019933"};
    static String[] Maria    = {"00654444"};
    static String[] Eirini   = {"00999999"};
}

Ευχαριστω και καλη μερα σε ολους.

 

 

 

Δημοσ.

Αφού το κάνεις Out of Adapter, θα πρέπει να έχεις κάποιον Data Holder (πχ μια static list)

 

Δεν έχω δουλέψει με ExpandableListView αλλά κάπως έτσι μπορεί να είναι

class MyData {
	
	private static ArrayList<Contact> contacts = new ArrayList();

	//...

	public static Contact getByPos(int pos){
		return contacts.get(pos);
	}
}

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

	Contact contact = MyData.getByPos(childPos);
    
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse(contact.getNumber())); // Εδω πως θα παρω τα Strings απο το καθε child?
    startActivity(callIntent);
}

Δημοσ.

Καλημερα φιλε μου και σ ευχαριστω για την απαντηση.Δεν εχω παραθεσει ολο τον κωδικα,εχω αλλη μια κλαση,δεν ξερω αν ενοεις αυτο

 

 

public class MyDataProvider {

    public static HashMap<String, List<String>> getDataHashMap() {


        HashMap<String, List<String>> contactList = new HashMap<>();

        List<String> Iannis    = new ArrayList<>();
        List<String> kostas    = new ArrayList<>();
        List<String> Nikos     = new ArrayList<>();
        List<String> Manolis   = new ArrayList<>();
        List<String> Stefanos  = new ArrayList<>();
        List<String> Dimitris  = new ArrayList<>();
        List<String> Mpampis   = new ArrayList<>();
        List<String> Basilis   = new ArrayList<>();
        List<String> Giorgos   = new ArrayList<>();
        List<String> Maria     = new ArrayList<>();
        List<String> Eirini    = new ArrayList<>();

        for (int i = 0; i < MyDataArrays.Iannis.length; i++) {
            Iannis.add(MyDataArrays.Iannis);
        }

        for (int i = 0; i < MyDataArrays.kostas.length; i++) {
            kostas.add(MyDataArrays.kostas);
        }

        for (int i = 0; i < MyDataArrays.Nikos.length; i++) {
            Nikos.add(MyDataArrays.Nikos);
        }

        for (int i = 0; i < MyDataArrays.Manolis.length; i++) {
            Manolis.add(MyDataArrays.Manolis);
        }

        for (int i = 0; i < MyDataArrays.Stefanos.length; i++) {
            Stefanos.add(MyDataArrays.Stefanos);
        }

        for (int i = 0; i < MyDataArrays.Dimitris.length; i++) {
            Dimitris.add(MyDataArrays.Dimitris);
        }

        for (int i = 0; i < MyDataArrays.Mpampis.length; i++) {
            Mpampis.add(MyDataArrays.Mpampis);
        }

        for (int i = 0; i < MyDataArrays.Basilis.length; i++) {
            Basilis.add(MyDataArrays.Basilis);
        }

        for (int i = 0; i < MyDataArrays.Giorgos.length; i++) {
            Giorgos.add(MyDataArrays.Giorgos);
        }

        for (int i = 0; i < MyDataArrays.Maria.length; i++) {
            Maria.add(MyDataArrays.Maria);
        }

        for (int i = 0; i < MyDataArrays.Eirini.length; i++) {
            Eirini.add(MyDataArrays.Eirini);
        }

        contactList.put("iannis"  , Iannis);
        contactList.put("Kostas"  , kostas);
        contactList.put("Nikos"   , Nikos);
        contactList.put("Manolis" , Manolis);
        contactList.put("Stefanos", Stefanos);
        contactList.put("Dimitris", Dimitris);
        contactList.put("Mpampis" , Mpampis);
        contactList.put("Basilis" , Basilis);
        contactList.put("Giorgos" , Giorgos);
        contactList.put("Maria"   , Maria);
        contactList.put("Eirini"  , Eirini);



        return contactList;
    }
}

 

Τωρα προσπαθω να το κανω με Fragments,μου φαινεται πιο ευκολο

Δημοσ. (επεξεργασμένο)
Καλύτερα που το κάνεις πιο απλό με HashMaps χωρίς να φτιάξεις καν κλάση Contact. Οπότε αυτό που σου μένει να κάνεις είναι:

  • Σε 1η φάση να τραβήξεις από το HashMap την εγγραφή χρησιμοποιώντας το groupPosition (θα τραβήξεις το ArrayList)
  • Σε 2η φάση να βρεις τον αριθμό στο ArrayList χρησιμοποιώντας το childPos
Επεξ/σία από SakislolGR
  • Like 1
Δημοσ.

 

Καλύτερα που το κάνεις πιο απλό με HashMaps χωρίς να φτιάξεις καν κλάση Contact. Οπότε αυτό που σου μένει να κάνεις είναι:
  • Σε 1η φάση να τραβήξεις από το HashMap την εγγραφή χρησιμοποιώντας το groupPosition (θα τραβήξεις το ArrayList)
  • Σε 2η φάση να βρεις τον αριθμό στο ArrayList χρησιμοποιώντας το childPos

 

Θα το προσπαθησω,σ ευχαριστω για τις συμβουλες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...