簡體   English   中英

如何處理列表視圖中的復選框並從自定義基本適配器發回信息

[英]How to handle checkboxes in a listview and send information back from a custom base adapter

我有一個列表視圖,每個項目包含一個復選框和其他各種文本視圖。 在Main Activity中,我有一個名為listOfStuff的對象ArrayList。 從我正在定義的主要活動和使用自定義基本適配器。 在getView方法中,我為復選框定義了一個監聽器,如下所示:

holder.cbCompletionStatus.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(holder.cbCompletionStatus.isChecked()){
            listOfStuff.get(position).setComplete(1);
        } else {
            listOfStuff.get(position).setComplete(0);
        };
    }
});

我的問題是我不知道如何訪問listOfStuff及其中的對象來修改其中的信息。 if / else語句中的代碼可以讓我知道我想要做什么。 只是一個快速警告,我不僅是Android和Java的新手,而且是整個編程領域的新手。 謝謝。

更新:所以我最終自己解決了這個問題。 我只需要在主活動中將listOfStuff Arraylist設為靜態。 然后我可以在Main Activity中調用一個靜態函數來操作我需要的Array列表中的任何數據,如下所示:

MainActivity.checkBoxClicked(結果,位置);

這是我的班級:

class ImageInfoAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        if(viewcount == 0){
            return 0;
        }
        return viewcount;
    }

    @Override
    public Object getItem(int position) {
        return isSentAlList.get(position);
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        final ViewHolder viewHolder;
        View rowView=view;

        if(rowView==null){
            LayoutInflater layoutinflate =  LayoutInflater.from(ListPictures.this);
            rowView=layoutinflate.inflate(R.layout.listviewayout, parent, false);
            viewHolder = new ViewHolder();

            viewHolder.textViewisSentFlag = (TextView)rowView.findViewById(R.id.textViewisSentFlag);
            viewHolder.imageViewToSent = (ImageView)rowView.findViewById(R.id.imageViewToSent);
            viewHolder.checkBoxToSend = (CheckBox)rowView.findViewById(R.id.checkBoxToSend);

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

        viewHolder.ref = position;
        Log.i("InfoLog","viewHolder.ref = position; "+viewHolder.ref); 
        viewHolder.textViewisSentFlag.setText(isSentAlList.get(position)); 
        Bitmap blob = BitmapFactory.decodeByteArray(imageAlList.get(position), 0, imageAlList.get(position).length);
        viewHolder.imageViewToSent.setImageBitmap(blob);
        viewHolder.checkBoxToSend.setClickable(true);

        if(checked.containsKey(""+viewHolder.ref)){   ///if this id is present as key in hashmap  
            Log.i("InfoLog","checked.containsKey "+viewHolder.ref);
            if(checked.get(""+viewHolder.ref).equals("true")){  //also check whether it is true or false to check/uncheck checkbox 
                Log.i("InfoLog","checked.get(position) "+viewHolder.ref); 
                viewHolder.checkBoxToSend.setChecked(true);
            } else
                viewHolder.checkBoxToSend.setChecked(false);
        } else
            viewHolder.checkBoxToSend.setChecked(false);

        viewHolder.checkBoxToSend.setOnCheckedChangeListener(new OncheckchangeListner(viewHolder));
        return rowView;

    }//End of method getView
}//End of class ImageInfo



class ViewHolder{

    private TextView textViewisSentFlag = null;
    private ImageView imageViewToSent = null;
    private CheckBox checkBoxToSend = null;

    int ref;
}//End of class ViewHolder

/////////////////////////這是我的oncheckchangedlistener //////////////////// ////

class OncheckchangeListner implements OnCheckedChangeListener{
    ViewHolder viewHolder = null; 
    public OncheckchangeListner(ViewHolder viHolder) {
        viewHolder =  viHolder;  
    }
    @Override 
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        if(viewHolder.checkBoxToSend.equals(buttonView)) {       
            if(!isChecked) {
                Log.i("InfoLog","checked.get before "+checked.get(""+viewHolder.ref));
                checked.put(""+viewHolder.ref,"false");
                Log.i("InfoLog","checked.get after "+checked.get(""+viewHolder.ref));
            } else
                checked.put(""+viewHolder.ref,"true");
        } else
            Log.i("InfoLog","i m in checkchange ");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM