我使用Base适配器进行列表视图,滚动时,位置发生了变化。,如何克服这个问题, 这是我的基础适配器类。
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,
};
}
请帮助我克服这一点。
答案 0 :(得分: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 接受位置中,您拥有所有已检查的位置。试试吧。