在自定义列表视图复选框被选中,当我滚动 [英] In Custom List view check box is unchecked when I scrolling
本文介绍了在自定义列表视图复选框被选中,当我滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道这个问题已经被问了一遍又一遍,但还是我没能找到一个有帮助的建议。复选框被选中获得当我滚动列表视图。我使用数组列表存储选定项的ID列表视图特别是当项目 未被选中它是从列表视图中删除。
公共类ManagePracticeLogAdapter扩展了BaseAdapter
{
上下文语境;
LayoutInflater充气;
菜单项的菜单,addlog;
名单<整数GT; SelectedBox;
ArrayList的< HashMap的<字符串,字符串>>数据;
HashMap的<字符串,字符串> resultp =新的HashMap<字符串,字符串>();
公共ManagePracticeLogAdapter(
上下文的背景下,
ArrayList的< HashMap的<字符串,字符串>> ArrayList中,
菜单项MyMenu菜单,
菜单项myaddlog)
{
this.context =背景;
数据=数组列表;
菜单= MyMenu菜单;
addlog = myaddlog;
}
@覆盖
公众诠释getCount将()
{
返回data.size();
}
@覆盖
公共对象的getItem(INT位置)
{
返回null;
}
@覆盖
众长getItemId(INT位置)
{
返回0;
}
//方法,以显示生成日志活动在列表视图中的数据
@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup)
{
// TODO自动生成方法存根
TextView的日期时间;
TextView的totminutes;
TextView的技能;
TextView的天气;
最后复选框chkdelete;
充气=(LayoutInflater)上下文
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
查看ItemView控件= inflater.inflate(R.layout.logitem1,父母,假);
//获取位置
resultp = data.get(位置);
//定位在listview_item.xml的TextViews
日期时间=(TextView中)itemView.findViewById(R.id.id_datetime);
totminutes =(TextView中)itemView.findViewById(R.id.totminutes);
技能=(TextView中)itemView.findViewById(R.id.id_skills);
天气=(TextView中)itemView.findViewById(R.id.id_weather);
chkdelete =(复选框)itemView.findViewById(R.id.id_chkDelete);
//捕捉位置,并设置结果的TextViews
datetime.setText(resultp.get(Skill_practice));
totminutes.setText(resultp.get(Day_minutes)+分);
skills.setText(resultp.get(Night_minutes));
weather.setText(resultp.get(Prac_Date));
字符串字体路径=字体/ Roboto-Light.ttf;
字样TF = Typeface.createFromAsset(context.getAssets(),字体路径);
datetime.setTypeface(TF);
totminutes.setTypeface(TF);
skills.setTypeface(TF);
weather.setTypeface(TF);
SelectedBox =新的ArrayList<整数GT;();
chkdelete.setOnCheckedChangeListener(新OnCheckedChangeListener()
{
@覆盖
公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked)
{
如果(SelectedBox.size() - 1 == 0)
{
menu.setVisible(假);
addlog.setVisible(真正的);
}其他
{
addlog.setVisible(假);
}
如果(器isChecked)
{
SelectedBox.add(buttonView.getId());
menu.setVisible(真正的);
addlog.setVisible(假);
}否则,如果(!器isChecked)
{
SelectedBox.remove(SelectedBox.indexOf(buttonView.getId()));
}
}
});
menu.setOnMenuItemClickListener(新OnMenuItemClickListener()
{
@覆盖
公共布尔onMenuItemClick(菜单项项)
{
// TODO自动生成方法存根
如果(!SelectedBox.isEmpty())
{
Toast.makeText(背景下,菜单选项4加!
Toast.LENGTH_LONG).show();
}
返回false;
}
});
itemView.setOnClickListener(新OnClickListener()
{
@覆盖
公共无效的onClick(查看arg0中)
{
意向意图=新的意图(背景下,LogEdit.class);
intent.putExtra(S11,更新实践);
context.startActivity(意向);
}
});
返回ItemView控件;
}
}
解决方案
您getView方法应该是这样的。
创建ViewHolder类
静态类ViewHolder {
TextView的日期时间;
TextView的totminutes;
TextView的技能;
TextView的天气;
复选框chkdelete;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
ViewHolder viewHolder = NULL;
如果(convertView == NULL){
LayoutInflater充气= context.getLayoutInflater();
convertView = inflator.inflate(R.layout.logitem1,NULL);
viewHolder =新ViewHolder();
viewHolder.datetime =(TextView中)convertView.findViewById(R.id.id_datetime);
//做同样的事情,其他textviews和复选框。
viewHolder.chkdelete.setOnCheckedChangeListener(新CompoundButton.OnCheckedChangeListener(){
@覆盖
公共无效onCheckedChanged(CompoundButton buttonView,布尔器isChecked){
INT为getPosition =(整数)buttonView.getTag(); //下面就让我们看,我们已经为使用setTag的复选框的位置。
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.id_datetime,viewHolder.datetime);
//其他textviews和复选框做同样的
} 其他 {
viewHolder =(ViewHolder)convertView.getTag();
}
viewHolder.chkdelete.setTag(位置); //这行是很重要的。
viewHolder.datetime.setText(resultp.get(Skill_practice));
//做同样为他人
返回convertView;
}
您需要根据自己的需要进行修改。这code将解决在滚动你的问题。
I know that this question has been asked over and over again but still I've not been able to find a helpful suggestion. Check box is getting unchecked when I scroll the List view. I am using Array List to store id of a selected item in the list view when particular item is unchecked it is removed from List view.
public class ManagePracticeLogAdapter extends BaseAdapter
{
Context context;
LayoutInflater inflater;
MenuItem menu,addlog;
List<Integer> SelectedBox;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
public ManagePracticeLogAdapter(
Context context,
ArrayList<HashMap<String, String>> arraylist,
MenuItem mymenu,
MenuItem myaddlog)
{
this.context = context;
data = arraylist;
menu=mymenu;
addlog=myaddlog;
}
@Override
public int getCount()
{
return data.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
// Method to display data of Produce log Activity in list view
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
TextView datetime;
TextView totminutes;
TextView skills;
TextView weather;
final CheckBox chkdelete;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.logitem1, parent, false);
// Get the position
resultp = data.get(position);
// Locate the TextViews in listview_item.xml
datetime = (TextView) itemView.findViewById(R.id.id_datetime);
totminutes = (TextView) itemView.findViewById(R.id.totminutes);
skills= (TextView) itemView.findViewById(R.id.id_skills);
weather=(TextView)itemView.findViewById(R.id.id_weather);
chkdelete=(CheckBox)itemView.findViewById(R.id.id_chkDelete);
// Capture position and set results to the TextViews
datetime.setText(resultp.get("Skill_practice"));
totminutes.setText(resultp.get("Day_minutes")+" min");
skills.setText(resultp.get("Night_minutes"));
weather.setText(resultp.get("Prac_Date"));
String fontPath = "fonts/Roboto-Light.ttf";
Typeface tf = Typeface.createFromAsset(context.getAssets(), fontPath);
datetime.setTypeface(tf);
totminutes.setTypeface(tf);
skills.setTypeface(tf);
weather.setTypeface(tf);
SelectedBox = new ArrayList<Integer>();
chkdelete.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(SelectedBox.size()-1==0)
{
menu.setVisible(false);
addlog.setVisible(true);
}else
{
addlog.setVisible(false);
}
if(isChecked)
{
SelectedBox.add(buttonView.getId());
menu.setVisible(true);
addlog.setVisible(false);
}else if(!isChecked)
{
SelectedBox.remove(SelectedBox.indexOf(buttonView.getId()));
}
}
});
menu.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override
public boolean onMenuItemClick(MenuItem item)
{
// TODO Auto-generated method stub
if(!SelectedBox.isEmpty())
{
Toast.makeText(context, "Menu option 4 added!",
Toast.LENGTH_LONG).show();
}
return false;
}
});
itemView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
Intent intent = new Intent(context,LogEdit.class);
intent.putExtra("s11","Update Practice");
context.startActivity(intent);
}
});
return itemView;
}
}
解决方案
Your getView method should look like this
Create a ViewHolder class
static class ViewHolder {
TextView datetime;
TextView totminutes;
TextView skills;
TextView weather;
CheckBox chkdelete;
}
@Override
public View getView(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.datetime = (TextView) convertView.findViewById(R.id.id_datetime);
// do the same thing for other textviews and checkbox.
viewHolder.chkdelete.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.
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.id_datetime, viewHolder.datetime);
// do the same for other textviews and checkbox
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.chkdelete.setTag(position); // This line is important.
viewHolder.datetime.setText(resultp.get("Skill_practice"));
// do the same for others
return convertView;
}
You need to modify it according to your needs. This code will solve your problem on scroll.
这篇关于在自定义列表视图复选框被选中,当我滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文