Autore Topic: Expandable listview con immagini diverse  (Letto 351 volte)

Offline Smoke666

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 11.04, Windows 7
Expandable listview con immagini diverse
« il: 26 Giugno 2013, 22:53:30 CEST »
0
Ciao a tutti, ho un problema: vorrei implementare una expadable list view con immagini diverse per ogni gruppo, ma non riesco a reperire materiale per implementarla. Qualcuno potrebbe darmi qualche suggerimento?

Grazie in anticipo!

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Expandable listview con immagini diverse
« Risposta #1 il: 26 Giugno 2013, 23:27:46 CEST »
0
Per immagini diverse intendi indicatore del gruppo (aperto-chiuso)? O in caso negativo, le immagini dove le vuoi mettere? Gruppi o figli?
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Expandable listview con immagini diverse
« Risposta #2 il: 27 Giugno 2013, 02:39:57 CEST »
+1
Diciamo che non sei stato molto chiaro, comunque devi utilizzare un'adapter che estende la classe BaseExpandableListAdapter dove devi andare a fare l'ovverride di questi metodi (nel mio caso li ho implementati così):

Codice (Java): [Seleziona]
@Override
                public long getChildId(int groupPosition, int childPosition) {
                        return childPosition;
                    }
               
            @Override
            public boolean areAllItemsEnabled()
            {
                return true;
            }
            @Override
            public int getChildrenCount(int groupPosition) {
                return itemsChildren.get(groupPosition).size();
               
            }
 @Override
            public JSONObject getGroup(int groupPosition) {
                return itemsGroup.get(groupPosition);
            }

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

            @Override
            public long getGroupId(int groupPosition) {
                return groupPosition;
            }
            @Override
            public boolean hasStableIds() {
                return false;
            }
         
            @Override
            public boolean isChildSelectable(int arg0, int arg1) {
                return true;
            }
       
            @Override
            public int getChildTypeCount ()
            {
                return 2;
            }
  @Override
            public int getChildType(int groupPosition,int childPosition)
            {
                int result = 0;
                if (childPosition == getChildrenCount(groupPosition) - 1)
                        result = 1;
                return result;
            }

 @Override
            public View getGroupView(int groupPosition, boolean isExpanded, View convertView,ViewGroup parent)
            {

                View v=convertView;
                if (v==null) {
                    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.feedcell, null);
                }
                try
                {
                        JSONObject o = getGroup(groupPosition);
                       
                        if(o!=null)
                               
                        {
                                       
                                       
                                        TextView un =(TextView)v.findViewById(R.id.feedcell_username);
                                        un.setText(o.getString("username"));
                                       
                                        TextView sd =(TextView)v.findViewById(R.id.feedcell_scantime);
                                                sd.setText(o.getString("ShareTime"));
                                                 
                                ImageView feedcell_rescanimg1=(ImageView) v.findViewById(R.id.feedcell_rescanimg1);
                               
                                TextView favoriteNum=(TextView)v.findViewById(R.id.feedcell_favorite);
                                favoriteNum.setText(o.getString("favorites"));
                               
                                TextView commentsNum = (TextView)v.findViewById(R.id.feedcell_commentnum);
                                String messages=o.getString("messages");
                                commentsNum.setText(messages);
                               
                                final int mess=Integer.valueOf(messages);
                             
                               
                                                Button rescanbtn=(Button)v.findViewById(R.id.feedcell_rescan);
                                                final int idx=groupPosition;
                                       
                                               
                                                boolean isscanned=o.getInt("scanned")==1?true:false;
                                                if(isscanned)
                                                {
                                                        feedcell_rescanimg1.setVisibility(View.INVISIBLE);
                                                        rescanbtn.setVisibility(View.GONE);
                                                       
                                                } else
                                                {
                                                        feedcell_rescanimg1.setVisibility(View.VISIBLE);
                                                        rescanbtn.setVisibility(View.VISIBLE);
                                                        rescanbtn.setOnClickListener(new OnClickListener(){
                                                                @Override
                                                                public void onClick(View v) {
                                                                        rescan(idx);
                                                                }});
                                                }
                                               
                                       
                                       
                       
                                        TextView groupCount =(TextView)v.findViewById(R.id.feedcell_count);
                                        groupCount.setText(String.format("%,d", o.getInt("rescanned")));
                                       
                                        TextView groupFavoriteNum=(TextView)v.findViewById(R.id.feedcell_favorite);
                                        groupFavoriteNum.setText(o.getString("favorites"));
                                       
                                        TextView groupCommentsNum = (TextView)v.findViewById(R.id.feedcell_commentnum);
                                groupCommentsNum.setText(o.getString("messages"));
                               
                                 ImageView userimg = (ImageView) v.findViewById(R.id.feedcell_userimg);
                                userimg.setImageResource(R.drawable.stub);
                                               
                                ImageView tt = (ImageView) v.findViewById(R.id.feedcell_snapimg);
                                                tt.setImageResource(R.drawable.feednoimage);
                                               
                            String imgurl=o.getString("image");
                                                if(imgurl!=null && imgurl!="")
                                                        imageLoader.DisplayImage(imgurl, context, userimg);
                                               
                                                final String t_userid=o.getString("UserId");
                            userimg.setOnClickListener(new OnClickListener(){
                                                        @Override
                                                        public void onClick(View v) {
                                                                openProfile(t_userid);
                                                        }});
                           
                           
                           JSONObject snapshot=o.getJSONObject("snapshot");
                                               
                           
                               
                                                String URL = snapshot.getString("Image");
                                                if(URL!=null && URL.length()>5)
                                                {
                                                        imageLoader.DisplayImage(URL, context, tt);
                                                }
                                               
                                                ImageView feedcell_featured=(ImageView) v.findViewById(R.id.feedcell_featured);
                                   
                                                        if(snapshot.getInt("Featured")==0)
                                        feedcell_featured.setVisibility(View.INVISIBLE);
                                    else
                                        feedcell_featured.setVisibility(View.VISIBLE);
                                   
                                    TextView st =(TextView)v.findViewById(R.id.feedcell_title);
                                                        final String m_title=snapshot.getString("Title");
                                                        st.setText(m_title);
                                                        final String m_url=snapshot.getString("Link");
                                                        TextView sl =(TextView)v.findViewById(R.id.feedcell_link);
                                                        sl.setText(m_url);
                                                       
                                                       
                                                        TextView sdesc =(TextView)v.findViewById(R.id.feedcell_desc);
                                                        sdesc.setText(snapshot.getString("Description"));
                                                        sdesc.setOnClickListener(new OnClickListener(){
                                                                @Override
                                                                public void onClick(View v) {
                                                                        openWebView(m_url,m_title);
                                                                       
                                                                }});
                                                       
                                                        final String snapId=snapshot.getString("SnapshotId");
                                                        final boolean isExp=isExpanded;

                                                        scanCommFav=(RelativeLayout)v.findViewById(R.id.feedcell_scancommentfavorite);
                                                       
                                                        scanCommFav.setOnClickListener(new OnClickListener(){
                                                               
                                                                @Override
                                                                public void onClick(View v)
                                                                {
                                                                        if(!isExp)
                                                                        {
                                                                                if(mess==0)
                                                                                {
                                                                                        setIdx(idx);
                                                                                        addIndex(idx);
                                                                                        getCommentNoList();
                                                                               
                                                                                }
                                                                                else
                                                                                {
                                                                                        setIdx(idx);
                                                                                        addIndex(idx);
                                                                                        callCommentScript(snapId);

                                                                                }
                                                                               
                                                                        }
                                                                        else if(isExp)
                                                                        {
                                                                                setIdx(idx);
                                                                                removeIndex(idx);
                                                                                closeGroup(idx);

                                                                               
                                                                        }
                                                                       
                                               

                                                                }
                                                               
                                                        });
                                                       
                                                        ImageButton favoriteStar=(ImageButton)v.findViewById(R.id.feedcell_favoritestar);
                                               
                                                        favoriteStar.setOnClickListener(new OnClickListener(){
                                                               
                                                                @Override
                                                                public void onClick(View v)
                                                                {
                                                                        callFavoriteScript(snapId);
                                                                        idFav=idx;
                                                               
                                                                }
                                                               
                                                        });

                                                       

                                                       
                        }      
                }
                        catch(Exception e)
                        {}
               
                return v;
            }
           
           
            @Override
            public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
            {
               
               
                View v = convertView;
                int type=getChildType(groupPosition,childPosition);
            LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                if (v == null)
                {
                    switch(type)
                {
                       
                        case TYPE_EDIT:
                       
                                v = vi.inflate(R.layout.edittextcommentlist,null);
                                break;
                       
                       
                        case TYPE_CHILD:
               
                                v = vi.inflate(R.layout.feedcommentcell,null);
                                break;
                       
                }
         
                }  
                try
                {
                        if(type == TYPE_CHILD)
                        {
                                final JSONObject o = getChild(groupPosition,childPosition);
                               
                                if(o!=null)
                                {
                                       
                                        TextView commentUser=(TextView)v.findViewById(R.id.feedcommentcell_username);
                                        commentUser.setText(o.getString("username"));
                                       
                                        TextView commentText=(TextView)v.findViewById(R.id.feedcommentcell_comment);
                                        commentText.setText(o.getString("Message"));
                                       
                                        TextView commentScanHour=(TextView)v.findViewById(R.id.feedcommentcell_scanhour);
                                        commentScanHour.setText(o.getString("timestamp"));
                                       
                                        ImageView commentImg=(ImageView)v.findViewById(R.id.feedcommentcell_profileimg);
                                        String imgurl=o.getString("userimage");
                                       
                                       
                                        String snapId=o.getString("SnapshotId");
                                        setSnapshotId(snapId);
                                       
                                       
                                        if(imgurl!=null && imgurl!="")
                                                imageLoaderComment.DisplayImage(imgurl, context, commentImg);

                       
                                }
                               
                        }
                        else if(type==TYPE_EDIT)
                        {
                                JSONObject o = getChild(groupPosition,childPosition);
                                if(o!=null)
                                {
                               
                                        final int groupPos=groupPosition;
                                               
                                                addComment = (EditText)v.findViewById(R.id.feedcell_edittxt);
                                                addComment.requestFocus();
                                               
                                                       
                                       
                                                addComment.setOnClickListener(new OnClickListener(){
                                                       
                                                                @Override
                                                                public void onClick(View v)
                                                                {
                                                                        addComment.setText("");
                                                                       
                                                               
                                                                       
                                                                }
                                                });
                                               
                                                addComment.setOnKeyListener(new OnKeyListener() {
                                                    public boolean onKey(View v, int keyCode, KeyEvent event) {
                                                           
                                                         
                                                         if((event.getAction() == KeyEvent.ACTION_UP) && (keyCode == KeyEvent.KEYCODE_ENTER ))
                                                         {
                                                                 String SnapId=getSnapshotId();
                                                               
                                                                                if(itemsChildren.get(groupPos).size()>1)
                                                                                {
                                                                                         if(getEditContent()>=1)
                                                                                         {
                                                                                               
                                                                                                getCommentAndAdd(SnapId,groupPos);
                                                                                            hideKeyboard();
                                                                                           
                                                                                         }
                                                                                         else
                                                                                         
                                                                                                 hideKeyboard();
                                                                                       
                                                                                }
                                                            else if(itemsChildren.get(groupPos).size()==1)
                                                                {
                                                                if(getEditContent()>=1)
                                                                {
                                                                       
                                                                        String groupSnap= getSnapFromAdp2(groupPos);
                                                                        getCommentAndAdd(groupSnap,groupPos);
                                                                                            hideKeyboard();

                                                                }
                                                                else
                                                               
                                                                        hideKeyboard();
                                                                                }

                                                         }
                                                   
                                                 
                                                         return false;
                                                    }
                                                    });
                                               
                                               
commentBtn=(Button)v.findViewById(R.id.feedcell_commentbtn);
                                                commentBtn.setOnClickListener(new OnClickListener(){

                                                                @Override
                                                                public void onClick(View v) {
                                                                       
                                                                        String SnapId=getSnapshotId();
                                                       
                                                                        if(itemsChildren.get(groupPos).size()>1)
                                                                        {
                                                                                   
                                                                                   if(getEditContent()>=1)
                                                                                   {
                                                                                           getCommentAndAdd(SnapId,groupPos);
                                                                                           hideKeyboard();

                                                                                   }
                                                                                   else
                                                                                           hideKeyboard();
                                                                           
                                                                        }
                                                    else if(itemsChildren.get(groupPos).size()==1)
                                                        {
                                                         if(getEditContent()>=1)
                                                         {
                                                                 String groupSnap= getSnapFromAdp2(groupPos);
                                                                 getCommentAndAdd(groupSnap,groupPos);
                                                                 hideKeyboard();

                                                         }
                                                         else
                                                                 hideKeyboard();

                                                        }

                                                                       
                                                                }
                                                       
                                                });

                                }
             
                        }
               
                }
                catch(Exception e)
                {}
                return v;
            }
           
           
        }

Nel mio caso avevo un'expandableList che aveva tra due tipi di children. Quando espandevo la lista avevo una serie di righe con informazioni su utenti e alla fine un'edittext.

Offline Smoke666

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 11.04, Windows 7
Re:Expandable listview con immagini diverse
« Risposta #3 il: 27 Giugno 2013, 08:43:34 CEST »
0
Io vorrei utilizzare una semplice immagine che non varia, nella stessa posizione che occuperebbe l'indicatore aperto-chiuso. Ora provo quanto suggerito da elfo83, intanto, grazie ad entrambi! :)

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Expandable listview con immagini diverse
« Risposta #4 il: 27 Giugno 2013, 16:42:10 CEST »
+1
Ok, se vuoi impostare un'immagine diversa per ogni gruppo come dici tu devi utilizzare l'attributo groupIndicator dell'expandablelistview. Se le immagini devono essere tutte diverse lo devi fare nel codice con il metodo public void setGroupIndicator (Drawable groupIndicator).
 http://developer.android.com/reference/android/widget/ExpandableListView.html#setGroupIndicator(android.graphics.drawable.Drawable)