Autore Topic: Identificare item di un custom adapter  (Letto 338 volte)

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Identificare item di un custom adapter
« il: 17 Giugno 2013, 12:14:40 CEST »
0
Salve a tutti =)
Non riesco a identificare l'item della mia Listview...
siccome il listener del bottone è dentro l'adapter ricevo sempre come position=0 o 7 ...qualche suggerimento?

----------------Actiivity
Codice (Java): [Seleziona]
lista = (ListView) myFragmentView.findViewById( R.id.listView_item_hm );
                 try{
                         new BackgroundWorker().execute();
                 }catch(Exception vv){}
                 lista.setAdapter(adapter);
                        lista.setOnItemClickListener(new OnItemClickListener() {
                                public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                                        TimerMachine p = (TimerMachine) parent.getItemAtPosition(position);
                                        //Toast.makeText(getActivity(), "item : "+position, Toast.LENGTH_SHORT).show();
                                        index_item=position;
                                        /*TimerViewCache viewCache = new TimerViewCache(view);
                                        set=viewCache.getButtonSet();
                                        if(set.isPressed()==true){
                                                index_item=position;
                                                Toast.makeText(getActivity(), ""+position, Toast.LENGTH_SHORT).show();
                                        }*/

                                }
                        });



private class MyHandler extends Handler {
                    @SuppressWarnings("unused")
                        private String value="";
                    public void handleMessage(Message msg) {
                      Bundle bundle = msg.getData();
                      if(bundle.containsKey("open_dialog")) {
                        value = bundle.getString("open_dialog");
                        //index_item = bundle.getInt("index");
                        //Toast.makeText(getActivity(), ""+index_item, Toast.LENGTH_SHORT).show();
                        ShowDialogSetTime();
                      }else{
                          value = bundle.getString("delete_dialog");
                          Toast.makeText(getActivity(), "ERASE TIMER", Toast.LENGTH_SHORT).show();
                      }
                    }
                  }

----item xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="55dp"
   android:background="@drawable/only_black_option_btn" >

    <TextView
       android:id="@+id/id_timer_date_hour"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="15dp"
       android:text="@string/prova"
       android:gravity="center_horizontal"
       android:textAppearance="?android:attr/textAppearanceLarge"
       android:textColor="#EEEEEE"
       android:textSize="25sp" />

    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentRight="true"
       android:layout_alignParentTop="true" >

        <widget.ListToggleButton
           android:id="@+id/toggleButton_on_off_timer"
           android:layout_width="60dp"
           android:layout_height="match_parent"
           android:background="@drawable/red_menu_btn"
           android:paddingLeft="2dp"
           android:paddingRight="2dp"
           android:textColor="#EEEEEE" />

        <widget.ListButton
           android:id="@+id/btn_set_hm"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_marginLeft="10dp"
           android:layout_marginRight="10dp"
           android:background="@drawable/black_menu_btn"
           android:paddingLeft="10dp"
           android:paddingRight="10dp"
           android:text="@string/set"
           android:textColor="#EEEEEE" />

        <widget.ListButton
           android:id="@+id/btn_erase_hm"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="@drawable/black_menu_btn"
           android:paddingLeft="10dp"
           android:paddingRight="10dp"
           android:text="@string/delete"
           android:textColor="#EEEEEE" />
    </LinearLayout>

</RelativeLayout>

---------adapter
Codice (Java): [Seleziona]
public class TimerAdapter extends ArrayAdapter<TimerMachine> {

        private int     resource;
        private LayoutInflater  inflater;
        private TimerMachine timer;
        private Context ctx;

        private Dialog dialogg;
        private TimePicker from,to;
        private View CurrentView;
        private TextView tvName;
       
        private static Handler handler;
        private int posiz;

        private TimerViewCache viewCache;
        private Button set,erase;
        private ToggleButton btn_toggle;
       
        public TimerAdapter ( Context context, int resourceId, List<TimerMachine> objects ,Handler mex) {
                super( context, resourceId, objects );
                resource = resourceId;
                ctx=context;
                inflater = LayoutInflater.from( context );
                handler=mex;
        }


        public View getView ( int position, View convertView, ViewGroup parent ) {
                // Recuperiamo l'oggetti che dobbiamo inserire a questa posizione
                timer = getItem( position );
                if( convertView == null ) {
                        convertView = inflater.inflate( resource, null);
                        viewCache = new TimerViewCache( convertView ,position);
                        convertView.setTag( viewCache );
                }else {
                        viewCache = ( TimerViewCache ) convertView.getTag();
                }
                CurrentView=convertView;
                try{
                        posiz=Integer.parseInt(timer.getCod_timer());
                }catch(Exception bb){}
                // Prendiamo le view dalla cache e mettiamoci i valori
                /*ImageView ivPhoto = viewCache.getImageViewPhoto();
                ivPhoto.setImageResource( tt_timer.getPhotoRes() );*/


                viewCache.setIndice(position);
               
                tvName = viewCache.getTextViewName();          
                tvName.setText( (posiz+1)+".  "+ctx.getString(R.string.from_txt)+" "+timer.getFromH()+":"+timer.getFromM()+"   "+
                                ctx.getString(R.string.to_txt)+" "+timer.getToH()+":"+timer.getToM());
                                //" FROM  00:00   TO  00:00 ");
                Button set = viewCache.getButtonSet();
                Button erase = viewCache.getButtonErase();
                ToggleButton btn_toggle = viewCache.getToggleButton();

               
                erase.setOnClickListener(new OnClickListener() {///click del bottone
                        public void onClick(View view) {
                                notifyMessage(1,"open");
                        }
                });
               
                set.setOnClickListener(new OnClickListener() {///click del bottone
                        public void onClick(View view) {
                                notifyMessage(0,"open");
                        }
                });
                //Click();
                return convertView;
        }
       
/////////////////////////////////////////////////////////////////////////////////
       
        /*public void Click(){
                 View.OnClickListener gestore = new View.OnClickListener() {
                  public void onClick(View view) {
                    switch(view.getId()){
                    ///////////////////////
                    case R.id.btn_set_hm:
                       
                        notifyMessage(0,"open");
                        break;
                    case R.id.btn_erase_hm:
                        notifyMessage(1,"open");
                        break;
                    case R.id.toggleButton_on_off_timer:
                        //ConfirmErase();
                        break;
                    }
                  }

                 };
                 set = viewCache.getButtonSet();
                 erase = viewCache.getButtonErase();
                 btn_toggle = viewCache.getToggleButton();
                 
                 set.setOnClickListener(gestore);
             erase.setOnClickListener(gestore);
             btn_toggle.setOnClickListener(gestore);
               
        }*/

       
       
       
////////////////////////////////////////////////////////////////////////////////////////////////////////////   
       
        private void notifyMessage(int oo,final String str) {
            Message msg = handler.obtainMessage();
            Bundle b = new Bundle();
            if(oo==0){
                b.putString("open_dialog", ""+str);
            }else{
                b.putString("delete_dialog", ""+str);
            }
            //b.putInt("index", posiz);
            msg.setData(b);
            handler.sendMessage(msg);
          }

       
}

----timerviewcache object
Codice (Java): [Seleziona]
public class TimerViewCache {
       
        private View baseView;
        private ToggleButton on_off_btn;
        private TextView time_textView;
        private Button btn_set;
        private Button btn_erase;
       
        private int indice;
       
        public TimerViewCache ( View baseView,int ind ) {
                this.baseView = baseView;
                this.indice=ind;
        }
       
        public TimerViewCache ( View baseView) {
                this.baseView = baseView;
        }
       
        ////////////////////////////////////////// TEXTVIEW TMEPO
        public TextView getTextViewName () {
                if ( time_textView == null ) {
                        time_textView = ( TextView ) baseView.findViewById(R.id.id_timer_date_hour);
                }
                return time_textView;
        }
       
       
        /////////////////////////////////BUTTON E TOGGLE BUTTON ITEM
       
        public ToggleButton getToggleButton () {
                if ( on_off_btn == null ) {
                        on_off_btn = ( ToggleButton ) baseView.findViewById( R.id.toggleButton_on_off_timer );
                }
                return on_off_btn;
        }
       
       
        public Button getButtonSet () {
                if ( btn_set == null ) {
                        btn_set = ( Button ) baseView.findViewById( R.id.btn_set_hm );
                }
                return btn_set;
        }
       
       
        public Button getButtonErase () {
                if ( btn_erase == null ) {
                        btn_erase = ( Button ) baseView.findViewById( R.id.btn_erase_hm );
                }
                return btn_erase;
        }


        public int getIndice() {
                return indice;
        }


        public void setIndice(int indice) {
                this.indice = indice;
        }
       

}

Codice (Java): [Seleziona]
public class ListButton extends Button {

        /**
         * Costruttore di default, inizializza il bottone in base ad un contesto e ad un insieme di attributi.
         * @param context Contesto.
         * @param attrs Attributi della vista.
         */

        public ListButton(Context context, AttributeSet attrs) {
                super(context, attrs);
                //Rendo forzatamente il bottone non selezionabile.
                //this.setFocusable(false);
        }

        /**
         * Imposta lo stato di pressione del bottone.
         * @param pressed Stato di pressione del bottone.
         */

        @Override
    public void setPressed(boolean pressed) {
            //Se il contenitore del bottone è premuto, allora non imposto anche il bottone a premuto
            /*if (pressed && ((View) getParent()).isPressed()) {
                    return;
            }*/

            //Se il contenitore non è premuto, allora è stato toccato il bottone. Procedo normalmente.
            super.setPressed(pressed);
    }
}

Codice (Java): [Seleziona]
public class TimerMachine implements Serializable{
       
//////////////////////////////////////////////////////////////
       
        private static final long serialVersionUID = -5497079030049607291L;
        private String cod_timer="0";
        private String on_off;//on oppure off ???
        private String fromTime="0";//da
        private String toTime="0";//a
        private String time;// am oppure pm ?????
       
        private int fromH=0,fromM=0;
        private int toH=0,toM=0;

/////////////////////////////////////////////////
       
       
        public TimerMachine(){
                this.setOn_off("off");
                this.setFromTime("0");
                this.setToTime("0");
                this.setCod_timer(cod_timer);
        }
       
        public TimerMachine(String n1,String n2,String n3,String n4,String n5){
                this.setOn_off(n1);
                this.setFromTime(n2);
                this.setToTime(n3);
                this.setCod_timer(n4);
                this.setOn_off(n5);
        }

        public String getCod_timer() {
                return cod_timer;
        }

        public void setCod_timer(String cod_timer) {
                this.cod_timer = cod_timer;
        }

        public String getFromTime() {
                return fromTime;
        }

        public void setFromTime(String fromTime) {
                this.fromTime = fromTime;
        }

        public String getOn_off() {
                return on_off;
        }

        public void setOn_off(String on_off) {
                this.on_off = on_off;
        }

        public String getToTime() {
                return toTime;
        }

        public void setToTime(String toTime) {
                this.toTime = toTime;
        }

        public String getTime() {
                return time;
        }

        public void setTime(String time) {
                this.time = time;
        }

        public int getFromM() {
                return fromM;
        }

        public void setFromM(int fromM) {
                this.fromM = fromM;
        }

        public int getFromH() {
                return fromH;
        }

        public void setFromH(int fromH) {
                this.fromH = fromH;
        }

        public int getToH() {
                return toH;
        }

        public void setToH(int toH) {
                this.toH = toH;
        }

        public int getToM() {
                return toM;
        }

        public void setToM(int toM) {
                this.toM = toM;
        }

}

Post unito: 18 Giugno 2013, 10:01:24 CEST
Nessuni che mi dia una mano??
« Ultima modifica: 18 Giugno 2013, 10:01:24 CEST da MisterAnt, Reason: Merged DoublePost »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?