Autore Topic: Settare un Item di una ListView non cliccabile  (Letto 837 volte)

Offline dany88ole

  • Nuovo arrivato
  • *
  • Post: 21
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    ------
  • Sistema operativo:
    windows 7 32bit
Settare un Item di una ListView non cliccabile
« il: 07 Gennaio 2014, 15:17:30 CET »
+1
Salve ragazzi.... in pratica io ho la mia list view formata un Item custom:
questa è la sua interfaccia:
Codice (Java): [Seleziona]
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

public interface Item {
    public int getViewType();
    public View getView(LayoutInflater inflater, View convertView);
    public String getText();
    public ImageView getImageView();

}
poi ho due oggetti , Header,EventItem che sono due Textview a voi il codice:
EventView.java

Codice (Java): [Seleziona]
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import MyListAdapter.RowType;

public class EventItem implements Item {
        private final String str1;
        private ImageView img;

        public EventItem(String text1) {
                this.str1 = text1;
        }

        @Override
        public int getViewType() {
                return RowType.LIST_ITEM.ordinal();
        }

        @Override
        public View getView(LayoutInflater inflater, View convertView) {
                if (convertView == null) {
                        convertView = (View) inflater.inflate(R.layout.row, null);
                }

                TextView text1 = (TextView) convertView.findViewById(R.id.list_item);
                text1.setText(str1);
                this.img = (ImageView)convertView.findViewById(R.id.next_icn_row);
               

                return convertView;
        }
       
        @Override
        public String getText(){
                return str1;
        }
       
        @Override
        public ImageView getImageView(){
                return img;
        }
}

Header.java


Codice (Java): [Seleziona]
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import MyListAdapter.RowType;

public class Header implements Item {
    private final String name;
    private ImageView img;

 
    public Header(String name) {
        this.name = name;
       
    }
 
    @Override
    public int getViewType() {
        return RowType.HEADER_ITEM.ordinal();
    }
 
    @Override
    public View getView(LayoutInflater inflater, View convertView) {
        if (convertView == null) {
            // No views to reuse, need to inflate a new view
            convertView = (View) inflater.inflate(R.layout.header, null);
        }
           
        TextView text = (TextView) convertView.findViewById(R.id.headerText);
        text.setText(name);
        this.img = (ImageView)convertView.findViewById(R.id.next_icn_header);
       
        return convertView;
    }
    @Override
    public String getText(){
        return name;
    }
   
   
    @Override
    public ImageView getImageView(){
        return img;
    }
}
poi ho il mio adapter di cui posto il codice:

Codice (Java): [Seleziona]
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class MyListAdapter extends BaseAdapter {
    private List<Item> items;
    private LayoutInflater inflater;
 
    public enum RowType {
        // Here we have two items types, you can have as many as you like though
        LIST_ITEM, HEADER_ITEM
    }
 
    public MyListAdapter(Context context, LayoutInflater inflater, List<Item> items) {
        super();
        this.items = items;
        this.inflater = inflater;
    }
 
    @Override
    public int getViewTypeCount() {
        // Get the number of items in the enum
        return RowType.values().length;
 
    }
 
    @Override
    public int getItemViewType(int position) {
        // Use getViewType from the Item interface
        return items.get(position).getViewType();
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Use getView from the Item interface
        return items.get(position).getView(inflater, convertView);
    }

       
        @Override
        public long getItemId(int position) {
                // TODO Auto-generated method stub
                return 0;
        }

        @Override
        public int getCount() {
                // TODO Auto-generated method stub
                return items.size();
        }

        @Override
        public Object getItem(int position) {
                // TODO Auto-generated method stub
                return items.get(position);
        }
}
ed infine la mia Activity:

Codice (Java): [Seleziona]
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener{
        private ListView lv;
        private int artifact=-1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                //setto il layout dell'activity
                setContentView(R.layout.primo);
                //recupero l'inflater
                LayoutInflater inflater = LayoutInflater.from(this);
                //recupero la listview
                lv=(ListView)findViewById(R.id.listViewMain) ;
                //istanzio l'array di item da mettere nella listview
                List<Item> items = new ArrayList<Item>();

                items.add(new Header("TITOLO 1"));
                items.add(new EventItem("primo item"));
                items.add(new EventItem("secondo item"));
                items.add(new EventItem("terzo item"));

                items.add(new Header("TITOLO 2"));
                items.add(new EventItem("primo item"));
                items.add(new EventItem("secondo item"));

                items.add(new Header("TITOLO 3"));

                items.add(new Header("TITOLO 4"));
                items.add(new EventItem("primo item"));
                items.add(new EventItem("secondo item"));

                //istanzio l'adapter e lo popolo
                MyListAdapter adapter = new MyListAdapter(this, inflater, items);
                //assegno alla listvire l'adapter popolato
                lv.setAdapter(adapter);
                //assegno alla lista l'ascolatore sul click
                lv.setOnItemClickListener(this);

        }

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //controllo se è la prima volta che viene cliccato un elemento della ListView
                if(artifact==-1)
                        artifact=position;
                //prelevo l'item selezionato
                Item a = (Item)lv.getItemAtPosition(position);
                //prelevo immagine dall'item
                ImageView img = a.getImageView();
                //rendo visibile l'immagine
                img.setVisibility(ImageView.VISIBLE);
               
                //controllo se l'item selezionato è diverso da quello precedente
                if(artifact!=position){
                        //rendo invisibile l'immagine dell'item precedente
                ((Item) lv.getItemAtPosition(artifact)).getImageView().setVisibility(ImageView.INVISIBLE);
                artifact=position;
                }      
                //prova:prelevo il testo dell'item
        System.out.println(a.getText());
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
}

}

Adesso il mio problema sta nel fatto che voglio rendere i Header non cliccabili
Ho provato sia nell'adapter che nella classe Header in particolare nel metodo getView()...........ma niente.....qualcuno mi illumini per favore :)

Post unito: 07 Gennaio 2014, 15:37:16 CET
Se può interessare
Ho risolto con questo codice:

Codice (Java): [Seleziona]
  @Override
        public boolean isEnabled(int position) {
            // TODO Auto-generated method stub

           return false;
    }
« Ultima modifica: 07 Gennaio 2014, 15:37:16 CET da dany88ole, Reason: Merged DoublePost »