2014-07-12 64 views
0

item.When我檢查我的元素添加按鈕改變 刪除,但是當我滾動列表視圖,我的刪除按鈕更改爲添加按鈕,我設置複選框刪除數倍,但它不應該直到所有複選框都未選中.for維護刪除和添加按鈕在操作欄中我點擊檢查我正在使用列表框設置元素的當前位置複選框,並且當複選框未勾選時從複選框中刪除該位置。複選框狀態並不在列表視圖保持

這裏我的問題是,當被選中複選框,添加符號變爲 刪除圖標。當我滾動並且選中的記錄不在屏幕上時, 刪除圖標會更改爲添加圖標,當我滾動回檢查的 記錄時,刪除圖標會回來。我很疑惑ListView中的這個複選框。請檢查我的代碼是否幫助我。

預先感謝

包com.office.sdpa.custom.classes;

公共類ManagePracAdapter擴展ArrayAdapter {

private final List<Model> list; 
private final Activity context; 
boolean checkAll_flag = false; 
boolean checkItem_flag = false; 
List<Integer> SelectedBox= new ArrayList<Integer>(); 
MenuItem Delete,addlog; 



public ManagePracAdapter(Activity context, List<Model> list,MenuItem mymenu,MenuItem  myaddlog) { 
    super(context, R.layout.row, list); 
    this.context = context; 
    this.list = list; 
    Delete=mymenu; 
    addlog=myaddlog; 

} 

static class ViewHolder { 
    protected TextView text; 
    protected TextView datetime; 
    protected TextView weather; 
    protected TextView duration; 
    protected TextView supervisor; 
    protected TextView day_night_icon; 
    protected CheckBox checkbox; 

} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     convertView = inflator.inflate(R.layout.logitem1, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) convertView.findViewById(R.id.id_skills); 
     viewHolder.datetime = (TextView) convertView.findViewById(R.id.id_datetime); 
     viewHolder.weather = (TextView) convertView.findViewById(R.id.id_weather); 
     viewHolder.duration=(TextView) convertView.findViewById(R.id.totminutes); 
     viewHolder.supervisor=(TextView) convertView.findViewById(R.id.conditions); 
     viewHolder.day_night_icon=(TextView) convertView.findViewById(R.id.day_night_icon); 
     viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.id_chkDelete); 
     viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
       list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 

       if(SelectedBox.size()-1==0) 
       { 
        Delete.setVisible(false); 
        addlog.setVisible(true); 
       }else 
       { 
        addlog.setVisible(false); 
       } 


       if(isChecked) 
       { 
        SelectedBox.add(position); 
        Delete.setVisible(true); 
        addlog.setVisible(false); 


       }else /*if(!isChecked)*/ 
       { 
       SelectedBox.remove(SelectedBox.indexOf(position)); 

       } 
      } 
     }); 





     convertView.setTag(viewHolder); 
     convertView.setTag(R.id.id_skills, viewHolder.text); 
     convertView.setTag(R.id.id_chkDelete, viewHolder.checkbox); 
     convertView.setTag(R.id.id_datetime,viewHolder.datetime); 
     convertView.setTag(R.id.id_weather,viewHolder.weather); 
     convertView.setTag(R.id.totminutes,viewHolder.duration); 
     convertView.setTag(R.id.conditions,viewHolder.supervisor); 
     convertView.setTag(R.id.day_night_icon,viewHolder.day_night_icon); 

     } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    viewHolder.checkbox.setTag(position); // This line is important. 

    viewHolder.text.setText(list.get(position).getName()); 
    viewHolder.datetime.setText(list.get(position).getDatetime()); 
    viewHolder.weather.setText(list.get(position).getWeather()); 
    viewHolder.checkbox.setChecked(list.get(position).isSelected()); 
    if(!list.get(position).getDay_minutes().toString().equalsIgnoreCase("0")) 
    { 
     viewHolder.duration.setText(list.get(position).getDay_minutes()); 
     viewHolder.day_night_icon.setBackgroundResource(R.drawable.sun); 
    }else 
    { 
     viewHolder.duration.setText(list.get(position).getNight_minutes()); 
     viewHolder.day_night_icon.setBackgroundResource(R.drawable.moon); 

    } 
    if(list.get(position).getSupervisor().equals("No supervisor")) 
    { 
     viewHolder.supervisor.setBackgroundResource(R.drawable.pending); 
    }else 
    { 
     viewHolder.supervisor.setBackgroundResource(R.drawable.approve); 
    } 
    String fontPath = "fonts/Roboto-Light.ttf"; 
    Typeface tf = Typeface.createFromAsset(context.getAssets(), fontPath); 
    viewHolder.datetime.setTypeface(tf); 
    viewHolder.duration.setTypeface(tf); 
    viewHolder.text.setTypeface(tf); 
    viewHolder.weather.setTypeface(tf); 


    Delete.setOnMenuItemClickListener(new OnMenuItemClickListener() { 

     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      // TODO Auto-generated method stub 

      AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

      // set title 
      alertDialogBuilder.setTitle("Student Driving Practice Log"); 

      // set dialog message 
      alertDialogBuilder 
      .setMessage("Are you sure want to Delete Record!") 
      .setCancelable(false) 
      .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 

        try 
        { 
         NewNewDataHelper db=new NewNewDataHelper(context); 

         if(!SelectedBox.isEmpty()) 
         { 
          for(int i=0;i<SelectedBox.size();i++) 
          { 

          // resultp=data.get(SelectedBox.get(i)); 
           String str[]=list.get(i).getDatetime().split(" "); 

           Log.d("Checked Element",str[0]+"\n"+str[1]+"\n"+list.get(i).getName()); 


           db.DeleteSingleLog(list.get(i).getName(),str[0],str[1]); 

           /*resultp=data.get(SelectedBox.get(i)); 

           String str[]=resultp.get("date_time").split(" "); 
           db.DeleteSingleLog(resultp.get("Skill"),str[0],str[1]);*/ 

            Toast.makeText(context,"Record Deleted", Toast.LENGTH_LONG).show(); 


          } 

          Log.d("LISTSTSTSTST", SelectedBox.toString()); 


          Intent intent = new Intent(context,ManagePracticeLogActivity.class); 
          intent.putExtra("s11", "delete"); 
          context.startActivity(intent); 
         } 
        }catch(Exception e) 
        { 

        } 


       } 
      }) 
      .setNegativeButton("No",new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int id) { 
        // if this button is clicked, just close 
        // the dialog box and do nothing 
        dialog.cancel(); 

       } 
      }); 

      // create alert dialog 
      AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); 



      return false; 
     } 
    }); 
    convertView.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 




      String str1 = null; 
      String str[]=list.get(position).getDatetime().split(" "); 


      Log.d("PARTICULAR SKILLLLL",str[1]); 
      str1=str[0]+"~"+list.get(position).getName()+"~"+str[1]; 
      Log.d("PARTICULAR SKILLLLL", str1); 
       Intent intent = new Intent(context,LogEdit.class); 
       intent.putExtra("s11","Update Practice"); 
       intent.putExtra("dataupdate",str1); 
       context.startActivity(intent); 
     } 
    }); 

    return convertView; 
} 

}

+0

http://stackoverflow.com/questions/16685366/customised-listview-using-arrayadapter-class-in-android/16686623#16686623。檢查這是否有助於 – Raghunandan

回答

0

嘗試更換適配器getView()。

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     ViewHolder viewHolder = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      convertView = inflator.inflate(R.layout.logitem1, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.id_skills); 
      viewHolder.datetime = (TextView) convertView.findViewById(R.id.id_datetime); 
      viewHolder.weather = (TextView) convertView.findViewById(R.id.id_weather); 
      viewHolder.duration=(TextView) convertView.findViewById(R.id.totminutes); 
      viewHolder.supervisor=(TextView) convertView.findViewById(R.id.conditions); 
      viewHolder.day_night_icon=(TextView) convertView.findViewById(R.id.day_night_icon); 
      viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.id_chkDelete); 

      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.text.setText(list.get(position).getName()); 
     viewHolder.datetime.setText(list.get(position).getDatetime()); 
     viewHolder.weather.setText(list.get(position).getWeather()); 
     viewHolder.checkbox.setChecked(list.get(position).isSelected()); 
     if(!list.get(position).getDay_minutes().toString().equalsIgnoreCase("0")) 
     { 
      viewHolder.duration.setText(list.get(position).getDay_minutes()); 
      viewHolder.day_night_icon.setBackgroundResource(R.drawable.sun); 
     }else 
     { 
      viewHolder.duration.setText(list.get(position).getNight_minutes()); 
      viewHolder.day_night_icon.setBackgroundResource(R.drawable.moon); 

     } 
     if(list.get(position).getSupervisor().equals("No supervisor")) 
     { 
      viewHolder.supervisor.setBackgroundResource(R.drawable.pending); 
     }else 
     { 
      viewHolder.supervisor.setBackgroundResource(R.drawable.approve); 
     } 
     String fontPath = "fonts/Roboto-Light.ttf"; 
     Typeface tf = Typeface.createFromAsset(context.getAssets(), fontPath); 
     viewHolder.datetime.setTypeface(tf); 
     viewHolder.duration.setTypeface(tf); 
     viewHolder.text.setTypeface(tf); 
     viewHolder.weather.setTypeface(tf); 

     viewHolder.checkbox.setTag(position); // This line is important. 


     viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       list.get(position).setSelected(isChecked); // Set the value of checkbox to maintain its state. 

       if(SelectedBox.size()-1==0) 
       { 
        Delete.setVisible(false); 
        addlog.setVisible(true); 
       }else 
       { 
        addlog.setVisible(false); 
       } 


       if(isChecked) 
       { 
        SelectedBox.add(position); 
        Delete.setVisible(true); 
        addlog.setVisible(false); 


       }else /*if(!isChecked)*/ 
       { 
        SelectedBox.remove(SelectedBox.indexOf(position)); 

       } 
      } 
     }); 

     Delete.setOnMenuItemClickListener(new OnMenuItemClickListener() { 

      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

       // set title 
       alertDialogBuilder.setTitle("Student Driving Practice Log"); 

       // set dialog message 
       alertDialogBuilder 
         .setMessage("Are you sure want to Delete Record!") 
         .setCancelable(false) 
         .setPositiveButton("Yes",new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog,int id) { 

           try 
           { 
            NewNewDataHelper db=new NewNewDataHelper(context); 

            if(!SelectedBox.isEmpty()) 
            { 
             for(int i=0;i<SelectedBox.size();i++) 
             { 

              // resultp=data.get(SelectedBox.get(i)); 
              String str[]=list.get(i).getDatetime().split(" "); 

              Log.d("Checked Element",str[0]+"\n"+str[1]+"\n"+list.get(i).getName()); 


              db.DeleteSingleLog(list.get(i).getName(),str[0],str[1]); 

           /*resultp=data.get(SelectedBox.get(i)); 

           String str[]=resultp.get("date_time").split(" "); 
           db.DeleteSingleLog(resultp.get("Skill"),str[0],str[1]);*/ 

              Toast.makeText(context,"Record Deleted", Toast.LENGTH_LONG).show(); 


             } 

             Log.d("LISTSTSTSTST", SelectedBox.toString()); 


             Intent intent = new Intent(context,ManagePracticeLogActivity.class); 
             intent.putExtra("s11", "delete"); 
             context.startActivity(intent); 
            } 
           }catch(Exception e) 
           { 

           } 


          } 
         }) 
         .setNegativeButton("No",new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog,int id) { 
           // if this button is clicked, just close 
           // the dialog box and do nothing 
           dialog.cancel(); 

          } 
         }); 

       // create alert dialog 
       AlertDialog alertDialog = alertDialogBuilder.create(); 

       // show it 
       alertDialog.show(); 



       return false; 
      } 
     }); 
     convertView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 




       String str1 = null; 
       String str[]=list.get(position).getDatetime().split(" "); 


       Log.d("PARTICULAR SKILLLLL", str[1]); 
       str1=str[0]+"~"+list.get(position).getName()+"~"+str[1]; 
       Log.d("PARTICULAR SKILLLLL", str1); 
       Intent intent = new Intent(context,LogEdit.class); 
       intent.putExtra("s11","Update Practice"); 
       intent.putExtra("dataupdate",str1); 
       context.startActivity(intent); 
      } 
     }); 

     return convertView; 
    } 
+0

刪除圖標不應該發生變化,添加圖標,直到所有的複選框unchecked.and你的情況選中複選框自動取消選中當我滾動列表視圖 – user3651987

+0

我已經更新setOnCheckedChangeListener代碼可以請你看看這個。 –

+0

但它不工作...我不希望像這個複選框不應該取消選中,直到我手動取消選中複選框 – user3651987

0

試着讓你的getView方法如下:

public class ViewHolder 
{ 
    TextView contactname, statusmsg, msisdnview, imgview, chatstsview; 
    ImageView img; 
    CheckBox contactCheckBox; 
} 
ViewHolder holder = null; 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    // TODO Auto-generated method stub 
    holder=new ViewHolder(); 
    View rowView = convertView; 
    if(rowView == null) 
    { 
     rowView = inflater.inflate(R.layout.contact_list, null); 
     holder.contactname=(TextView) rowView.findViewById(R.id.textView1); 
     holder.statusmsg=(TextView) rowView.findViewById(R.id.textView2); 
     holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 
     holder.contactCheckBox = (CheckBox) rowView.findViewById(R.id.contactchk); 
     rowView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) rowView.getTag(); 
    } 

    holder.contactname.setTag("textview_"+msisdn[position]); 
    holder.contactCheckBox.setTag("checkbox_"+msisdn[position]); 
    holder.contactname.setText(result[position]); 

    ImageLoader img = new ImageLoader(context); 
    img.DisplayImage(imageId[position], loader, holder.img); 

    holder.statusmsg.setText(status[position]); 

    holder.contactCheckBox.setTag(position); 

    holder.contactCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {   
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      // TODO Auto-generated method stub 
      int getPosition = (Integer) buttonView.getTag(); 
      isCheckedCheckBox[getPosition] = buttonView.isChecked(); 
     } 
    }); 


    if(isCheckedCheckBox[position]) 
    { 
     holder.contactCheckBox.setChecked(true); 
    } 
    else 
    { 
     holder.contactCheckBox.setChecked(false); 
    } 
    holder.contactCheckBox.setOnClickListener(null); 

    rowView.setTag(holder); 
    return rowView; 
} 

這應該解決您的問題。

相關問題