Autore Topic: Immagine in una listView  (Letto 788 volte)

Offline japper

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
Immagine in una listView
« il: 26 Settembre 2012, 22:38:56 CEST »
0
ciao,
prima di tutto nn riesco a postare la foto più piccola :(

ho fatto un base adapter che per ogni riga riempe una text view e un imageview
questa lista ha anche dei separatori semplici con una textview
il problema è che quando carica la lista, le icone ( imageview ) nn me le da come voglio... da quello che ho capito quando android richiama la mia getView nn riesce a stabilizzare le immagini.

header.xml
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_header_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#b2b2b2"
    android:paddingBottom="2dip"
    android:paddingLeft="5dip"
    android:paddingTop="2dip"
/>

item.xml
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
       
    <ImageView
       android:id="@+id/list_item_image"
       android:layout_width="@dimen/item_size_image"
       android:layout_height="@dimen/item_size_image"
       />
<!-- android:src="@drawable/oro_aran" -->       
   
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/list_item_title"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/item_height_text"
        android:textSize="@dimen/item_size_text"
        />

</LinearLayout>

AdapterListsFragment
Codice (Java): [Seleziona]
/**
 * definisco il baseadapter della lista da visualizzare
 *
 */

public class AdapterListsFragment extends BaseAdapter {

        private static final int TYPE_ITEM = 0;
        private static final int TYPE_SEPARATOR = 1;
        private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;

        private ArrayList<String> mData = new ArrayList<String>();
        private LayoutInflater mInflater;
        private Context mContext;

        private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>();

        public AdapterListsFragment(Context context) {
                this.mContext = context;
                mInflater = (LayoutInflater) context
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        public void addItem(final String item) {
                mData.add(item);
                // da capire cosa fa
                notifyDataSetChanged();
        }

        public void addSeparatorItem(final String item) {
                mData.add(item);
                // salva la posizione del separator
                mSeparatorsSet.add(mData.size() - 1);
                notifyDataSetChanged();
        }

        @Override
        public int getItemViewType(int position) {
                // se la posizione richiesta è presente nella lista delle posizioni dei
                // separator
                // restituisce il TYPE_SEPARATOR
                return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
        }

        @Override
        public int getViewTypeCount() {
                return TYPE_MAX_COUNT;
        }

        public int getCount() {
                return mData.size();
        }

        public String getItem(int position) {
                if (mSeparatorsSet.contains(position)) {
                        Log.d("AdapterListsFragment", "getItem() position = "
                                        + (position + 1));
                        return null;
                }
                Log.d("AdapterListsFragment", "getItem() position = " + (position));
                return mData.get(position);
        }

        public long getItemId(int position) {
                // se è un header restituisco posizione 0 , cosi so se devo disablitare
                // il onListItemClick
                if (mSeparatorsSet.contains(position)) {
                        return 0;
                }
                int prePositionSeparator = 0;

                for (Integer separator : mSeparatorsSet) {
                        // se il separator è maggiore di position , capisco di quanto devo
                        // diminuire la posizione per
                        // sapere la posizione esatta dell'item
                        if (separator >= position) {
                                break;
                        }
                        prePositionSeparator++;
                }
                // perchè position parte da 0
                position++;
                return position - prePositionSeparator;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
                ViewHolder holder = null;
                AQuery aQuery = new AQuery(convertView);
                int type = getItemViewType(position);
                if (convertView == null) {
                        holder = new ViewHolder();
                        switch (type) {
                        case TYPE_ITEM:
//                              Log.d("AdapterListsFragment","item position = " + position);
                                convertView = mInflater.inflate(R.layout.list_item, null);
                                holder.textView = (TextView) convertView.findViewById(R.id.list_item_title);
                                holder.imageView = (ImageView) convertView.findViewById(R.id.list_item_image);
                                //in base a un header particolare setto l'icona per ogni item
                                if(mData.get(position).equals("Introduzione")){
                                        //nessuna perchè ha solo un item
                                }else{
                                        if(this.getGallery(mSeparatorsSet, position, mData).equals("Medio Periodo")){
                                                holder.imageView.setImageResource(R.drawable.oro_aran);
//                                              holder.imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.oro_aran));
                                        }else{
                                                if(this.getGallery(mSeparatorsSet, position, mData).equals("Anno su anno")){
                                                        holder.imageView.setImageResource(R.drawable.oro_verde);
//                                                      holder.imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.oro_verde));
                                                }
                                        }
                                }
                                break;
                        case TYPE_SEPARATOR:
                                convertView = mInflater.inflate(R.layout.list_header, null);
                                holder.textView = (TextView) convertView.findViewById(R.id.list_header_title);
                                //in base a un header particolare setto il colore del background
                                if(mData.get(position).equals("Introduzione")){
                                        holder.textView.setBackgroundResource(R.drawable.bg_header2);
                                }else{
                                        if(mData.get(position).equals("Medio Periodo")){
                                                holder.textView.setBackgroundResource(R.drawable.background_label_orange);
                                        }else{
                                                if(mData.get(position).equals("Anno su anno")){
                                                        holder.textView.setBackgroundResource(R.drawable.background_label_green);
                                                }
                                        }
                                }

                                break;
                        }
                        Log.d("AdapterListsFragment","ramo si = convertView.setTag(holder);");
                        convertView.setTag(holder);
                } else {
                        Log.d("AdapterListsFragment","else = holder = (ViewHolder) convertView.getTag();");
                        holder = (ViewHolder) convertView.getTag();
                }
                holder.textView.setText(mData.get(position));
                return convertView;
        }

        public static class ViewHolder {
                public TextView textView;
                public ImageView imageView;
        }
       
        public String getGallery(TreeSet<Integer> positionGallery, int positionItem, List<String> lists){
//              Log.e("AdapterListsFragment","==============================================");
//              Log.e("AdapterListsFragment","lists = " + lists);
//              Log.e("AdapterListsFragment","==============================================");
                int prePositionGallery = 0;
                Iterator iterator = positionGallery.iterator();
                while(iterator.hasNext()){
                        Integer j =(Integer) iterator.next() ;
                        if(j > positionItem){
                                break;
                        }
                        prePositionGallery = j;
                }
                Log.d("AdapterListsFragment","gallery = " + lists.get(prePositionGallery));
                return lists.get(prePositionGallery);
        }
}

credo che basti questo codice per aiutarmi.



in questa immagine come vedete in fondo alla lista ci devono essere le icone del colore verde, invece sono mischiate con quelle arrancione

Offline japper

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
Re:Immagine in una listView
« Risposta #1 il: 27 Settembre 2012, 11:31:20 CEST »
0
risolto, nn devo settare i valori delle view solo convertview == null ma in intremabi :

Codice (Java): [Seleziona]
public View getView(int position, View convertView, ViewGroup parent) {
                Log.d("AdapterListsFragment","----------------------------");
                ViewHolder holder = null;
                AQuery aQuery = new AQuery(convertView);
                int type = getItemViewType(position);
                if (convertView == null) {
                        holder = new ViewHolder();
                        switch (type) {
                        case TYPE_ITEM:
                                convertView = mInflater.inflate(R.layout.list_item, null);
                                holder.textView = (TextView) convertView.findViewById(R.id.list_item_title);
                                holder.imageView = (ImageView) convertView.findViewById(R.id.list_item_image);
                                break;
                        case TYPE_SEPARATOR:
                                convertView = mInflater.inflate(R.layout.list_header, null);
                                holder.textView = (TextView) convertView.findViewById(R.id.list_header_title);
                                break;
                        }
                        Log.d("AdapterListsFragment","convertView.setTag(holder)");
                        convertView.setTag(holder);
                } else {
                        Log.d("AdapterListsFragment","holder = (ViewHolder) convertView.getTag()");
                        holder = (ViewHolder) convertView.getTag();
                }
                holder.textView.setText(mData.get(position));
                //se è un item
                if(type==0){
                        Log.d("AdapterListsFragment","mData.get() = " + mData.get(position));
                        Log.d("AdapterListsFragment","this.getGallery(mSeparatorsSet, position, mData) = " + this.getGallery(mSeparatorsSet, position, mData));
                        Log.d("AdapterListsFragment","this.getGallery().equals(\"Introduzione\") : " + this.getGallery(mSeparatorsSet, position, mData).equals("Introduzione"));
                        Log.d("AdapterListsFragment","this.getGallery().equals(\"Medio Periodo\") : " + this.getGallery(mSeparatorsSet, position, mData).equals("Medio Periodo"));
                        Log.d("AdapterListsFragment","this.getGallery().equals(\"Anno su Anno\") : " + this.getGallery(mSeparatorsSet, position, mData).equals("Anno su anno"));
                        //in base a un header particolare setto l'icona per ogni item
                        if(this.getGallery(mSeparatorsSet, position, mData).equals("Introduzione")){
                                Log.d("AdapterListsFragment","If Introduzione");
                                Log.d("AdapterListsGragment","postion : " + position);
                                holder.imageView.setVisibility(ImageView.INVISIBLE);
                        }else{
                                if(this.getGallery(mSeparatorsSet, position, mData).equals("Medio Periodo")){
                                        Log.d("AdapterListsFragment","If Medio Periodo");
                                        Log.d("AdapterListsGragment","postion : " + position);
                                        holder.imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.oro_aran));
                                }else{
                                        if(this.getGallery(mSeparatorsSet, position, mData).equals("Anno su anno")){
                                                holder.imageView.setImageDrawable(mContext.getResources().getDrawable(R.drawable.oro_verde));
                                                Log.d("AdapterListsFragment","If Anno su anno");
                                                Log.d("AdapterListsGragment","postion : " + position);
                                        }
                                }
                        }
                }else{
                        //se è un separated
                        if(type==1){
                                //in base a un header particolare setto il colore del background
                                if(mData.get(position).equals("Introduzione")){
                                        holder.textView.setBackgroundResource(R.drawable.bg_header2);
                                }else{
                                        if(mData.get(position).equals("Medio Periodo")){
                                                holder.textView.setBackgroundResource(R.drawable.background_label_orange);
                                        }else{
                                                if(mData.get(position).equals("Anno su anno")){
                                                        holder.textView.setBackgroundResource(R.drawable.background_label_green);
                                                }
                                        }
                                }
                        }
                }
                Log.d("AdapterListsFragment","----------------------------");
                return convertView;
        }