0

我为列表视图使用了基础适配器,并且在滚动时,位置发生了变化。,如何克服这个,这是我的基础适配器类。

Hello,

我将 Base 适配器用于列表视图,并且在滚动时,位置

变化。,如何克服这个,这是我的基础适配器类。

    public class MyCustomBaseAdapter extends BaseAdapter {
        MyCustomBaseAdapter custom;
        private OnClickListener onCheckClick;
        private OnCheckedChangeListener OnTextClick;
        Context context;
        ViewHolder holder;

        public void setOnClickListeners(OnClickListener 

onCheckClick) {
            // TODO Auto-generated method stub
            this.onCheckClick = onCheckClick;
        }

        public void setOnCheckedChangeListener

(OnCheckedChangeListener OnTextClick) {
            // TODO Auto-generated method stub
            this.OnTextClick = OnTextClick;
        }
         private static ArrayList<SearchResults> searchArrayList;

         private LayoutInflater mInflater;

         public MyCustomBaseAdapter(Context context, 

ArrayList<SearchResults> results) {
            this.context = context;
             searchArrayList = results;
             mInflater = LayoutInflater.from(context);
         }

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

         public Object getItem(int position) {
          return searchArrayList.get(position);
         }

         public long getItemId(int position) {
          return position;
         }

         public View getView(final int position, View convertView, 

ViewGroup parent) {

          SearchResults planet = (SearchResults) this.getItem( 

position ); 

          if (convertView == null) {

           convertView = mInflater.inflate

(R.layout.custom_row_view, null);

           holder = new ViewHolder();

           holder.txtName = (TextView) 

convertView.findViewById(R.id.mobileNumber);
           holder.txtCityState = (TextView) 

convertView.findViewById(R.id.messageContent);
           holder.id_txtView = (TextView) 

convertView.findViewById(R.id.id_textView);
           holder.checkBox = (CheckBox) 

convertView.findViewById(R.id.checkBox1);
           holder.datetime = (TextView) 

convertView.findViewById(R.id.date_time);
           holder.type = (TextView) convertView.findViewById

(R.id.type);
           holder.custom_layout = (LinearLayout) 

convertView.findViewById(R.id.custom_layout);     

           holder.checkBox.setOnClickListener(new 

OnClickListener() {

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

stub
                ((SMS)context).function(position);  
            }
        });
           holder.checkBox .setTag(Integer.valueOf(position));
           convertView.setTag(holder);

          }
          else
          {
           holder = (ViewHolder) convertView.getTag();
          }

          holder.txtName.setText(searchArrayList.get

(position).getName());
          holder.txtCityState.setText(searchArrayList.get

(position).getCityState());
          holder.id_txtView.setText(searchArrayList.get

(position).getPhone());
          holder.datetime.setText(searchArrayList.get

(position).getDatetime());

          //holder.type.setText(searchArrayList.get

(position).getType());

          holder.checkBox .setTag(Integer.valueOf(position));   

          //(2).This line is for avoiding checkbox selection for 

other checkboxess
          /*holder.checkBox.setChecked(planet.isChecked() );*/

          holder.checkBox.setOnCheckedChangeListener

(OnTextClick);  

          holder.checkBox.setChecked(searchArrayList.get

(position).isSelected());     

          return convertView;
         }

         static class ViewHolder {
          TextView txtName;
          TextView txtCityState;
          TextView id_txtView;
          CheckBox checkBox;
          TextView datetime;
          TextView type;
          LinearLayout custom_layout;
          LinearLayout main_layout;
          TextView empty_txt_msg;

         }

         Integer[] imgid = { 
                    R.drawable.ic_launcher, 
                    R.drawable.ic_launcher, 
                };
    }

请帮助我克服这一点。

4

1 回答 1

0

你可以使用 listview 方法setOnScrollListener

您每次滚动时都可以获得第一个可见位置、最后一个可见位置和位置总数。现在您可以在代码中使用它。

 listview.setOnScrollListener(new OnScrollListener() {
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            //get the showed item num, and if its equal to total, you can hide the view
            //get a reference to your viewid
            //viewid.setVisibility(View.GONE);
        }
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }
    });

已编辑: 在 getview 方法中的适配器内部,您可以指定以下代码:

holder.chkselect = (CheckBox) convertView
                .findViewById(R.id.txtselect);
    holder.chkselect.setTag(position);
    holder.chkselect.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Override
public void onCheckedChanged(CompoundButton buttonView,
        boolean isChecked) {
    if (isChecked) {

        int position = Integer.parseInt(buttonView.getTag()
                .toString());
        OrderDetail.acceptposition.add(String
                .valueOf(position));
    } else {
        int position = Integer.parseInt(buttonView.getTag()
                .toString());

        if (OrderDetail.acceptposition.contains(String
                .valueOf(position))) {
            OrderDetail.acceptposition.remove(String
                    .valueOf(position));
        }
    }

}

});

在 ArralyList 的接受位置中,您拥有所有选中的位置。试试看。

于 2012-11-01T10:22:51.333 回答