【发布时间】:2017-01-16 10:39:36
【问题描述】:
我的应用程序中有一个ListView 来显示记录列表。我有一个Button 和一些RadioButton,它们需要根据某些条件可见或不可见。当列表滚动时,最后一个视图变为重复,并且条件无法正常工作。发生了什么,我该如何解决?
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.approval_list, null);
//<<<<<<<<<<<<<<<<<<<Initialization of ListView Components
//holder.indivListvLayout = (LinearLayout)convertView.findViewById(R.id.indRevLayout);
holder.tv_com_title = (TextView) convertView.findViewById(R.id.tv_com_title);
holder.tv_designation = (TextView) convertView.findViewById(R.id.tv_designation);
holder.et_commnents = (EditText) convertView.findViewById(R.id.et_commnents);
holder.rb_rev = (RadioButton) convertView.findViewById(R.id.rb_rev);
holder.rb_rej = (RadioButton) convertView.findViewById(R.id.rb_rej);
holder.btn_modify = (Button) convertView.findViewById(R.id.btn_modify);
//>>>>>>>>>>>>>>>>>>End Initialization
//<<<<<<<<<<<<<<<<<<Make visible radio button according to user_group code
//List User Group Code
String user_group_code = mDisplayedValues.get(position).user_group_code;
//Log.e("User Group code from list", user_group_code);
if("RO".equals(user_group_code)){
holder.rb_app_recom.setVisibility(View.VISIBLE);
}else if("RM".equals(user_group_code)){
holder.rb_app_recom.setVisibility(View.VISIBLE);
}else("BDM".equals(user_group_code)){
holder.rb_app_recom.setVisibility(View.VISIBLE);
holder.rb_rej_req.setVisibility(View.VISIBLE);
}
//<<<<<<<<<<<<<<<<<<Selection of radio button according to flag
//Getting flag value
String approve_flag = mDisplayedValues.get(position).approve_flg;
if(approve_flag.equals("A")){
holder.rb_approved.setChecked(true);
}else (approve_flag.equals("R")){
holder.rb_rev.setChecked(true);
}
//>>>>>>>>>>>>>>>>>>>End selecting radio button
//<<<<<<<<<<<<<<<<<<<Make radio button click able
//String user_group_code2 = user_session_sp.getString("user_group_code", " ");
if(user_group_code2.equals(mDisplayedValues.get(position).user_group_code)){
holder.rb_approved.setClickable(true);
holder.rb_rev.setClickable(true);
}else{
holder.rb_approved.setClickable(false);
holder.rb_rev.setClickable(false);
}
//>>>>>>>>>>>>>>>>>>>End selecting radio button clekcable Setting
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_com_title.setText(mDisplayedValues.get(position).groucode +" "+ mDisplayedValues.get(position).comments_by+" "+ mDisplayedValues.get(position).designation);
holder.tv_designation.setText(mDisplayedValues.get(position).user_group_code);
holder.et_commnents.setText(mDisplayedValues.get(position).comments);
return convertView;
}
【问题讨论】:
-
在 if-else 循环之外设置可见性将解决您的问题。
-
每次滚动视图时,在 ListView 视图中渲染。在这里,您使用了视图持有者模式,因此它将重用相同的视图,因此不会改变可见性。
-
'if-else' 是循环吗? @Dhaval Patel
-
如果视图持有者重复使用相同的视图是否意味着视图不会被新数据替换?这是否意味着滚动列表后会显示相同的数据?
标签: android listview baseadapter