Android 滚动时失去更改的Listview项目
我的需要: 我想实现一个变量列表,它可以有动态的行数。 此列表包含3个文本视图、1个图像视图和3个图像按钮 用户可以点击选择一行。长按可选择多个项目。选择时,所选行UI将被更改。所选项目更改其背景和imageview的图像,一个图像按钮将在选择时可见 当用户点击ImageButton时,图像按钮将发生变化,其他图像按钮也将可见 如果某些项目已被选中,并且用户试图通过点击选择单行,则所有其他选定项目都将被删除。listview项应恢复其原始状态。like Imageview将以其默认图像重置,Imagebutton将消失 我的尝试: 我尝试使用基本适配器实现ListView。根据3个文本视图、1个图像视图和3个图像按钮的需要定义自定义行Android 滚动时失去更改的Listview项目,android,android-listview,Android,Android Listview,我的需要: 我想实现一个变量列表,它可以有动态的行数。 此列表包含3个文本视图、1个图像视图和3个图像按钮 用户可以点击选择一行。长按可选择多个项目。选择时,所选行UI将被更改。所选项目更改其背景和imageview的图像,一个图像按钮将在选择时可见 当用户点击ImageButton时,图像按钮将发生变化,其他图像按钮也将可见 如果某些项目已被选中,并且用户试图通过点击选择单行,则所有其他选定项目都将被删除。listview项应恢复其原始状态。like Imageview将以其默认图像重置,Im
package com.astron.myapplication;
import java.sql.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import com.astron.myapplication.R;
import com.astron.myapplication.TSSVariableInfo;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.ListView;
import org.w3c.dom.Text;
import android.widget.TableRow;
import android.view.View;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.Bitmap;
public class MyCustomBaseAdapter extends BaseAdapter {
TSSVariableInfo info[];
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, TSSVariableInfo[] results) {
info = new TSSVariableInfo[results.length];
info = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return info.length;
}
public Object getItem(int position) {
return info[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
DateFormat dateFormatFrom ;
DateFormat dateFormatTo;
Boolean IsRolSeleted = false;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.VariableCustomerGivenName = (TextView) convertView.findViewById(R.id.CustomerGivenName);
holder.VariableStandardName = (TextView) convertView.findViewById(R.id.StanddardName);
holder.VariableSectionName = (TextView) convertView.findViewById(R.id.SectionName);
holder.VariableValue = (TextView) convertView.findViewById(R.id.LastValue);
holder.VariableLastDate = (TextView) convertView.findViewById(R.id.LastDate);
holder.VariableLegendImage = (ImageView)convertView.findViewById(R.id.ImgLegend);
holder.VariableLegendImage.setTag(0);
holder.BtnMore = (ImageButton)convertView.findViewById(R.id.btnMore) ;
holder.BtnMore.setTag(0);
holder.BtnY2 = (ImageButton)convertView.findViewById(R.id.btn2y) ;
holder.BtnTL = (ImageButton)convertView.findViewById(R.id.btnTL) ;
convertView.setTag(holder);
convertView.setBackgroundColor(Color.parseColor("#E8E8E8"));
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.VariableCustomerGivenName.setText(info[position].VariableCustomerGivenName);
holder.VariableStandardName.setText(info[position].VariableStandarName);
holder.VariableSectionName.setText(info[position].SectionName);
holder.VariableValue.setText(info[position].Value.toString());
dateFormatFrom = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa");
dateFormatTo = new SimpleDateFormat("MM/dd/yy");
java.util.Date dt;
String strdt = info[position].LastDate;
dt = dateFormatFrom.parse(strdt);
dateFormatTo.format(dt);
holder.VariableLastDate.setText(dateFormatTo.format(dt));
//holder.VariableLastDate.setText(dateFormatTo.format(dateFormatFrom.format(info[position].LastDate)));
if(info[position].VariableCustomerGivenName.isEmpty() || info[position].VariableCustomerGivenName==null) {
holder.VariableCustomerGivenName.setText(info[position].VariableStandarName);
holder.VariableStandardName.setText(info[position].SectionName);
holder.VariableSectionName.setVisibility(View.INVISIBLE);
}
else
holder.VariableSectionName.setVisibility(View.VISIBLE);
holder.BtnMore.setVisibility(View.VISIBLE);
return convertView;
}
public void updateAdapter(TSSVariableInfo[] results) {
this.info= results;
//and call notifyDataSetChanged
notifyDataSetChanged();
}
static class ViewHolder {
TextView VariableCustomerGivenName;
TextView VariableStandardName;
TextView VariableSectionName;
TextView VariableValue;
TextView VariableLastDate;
ImageView VariableLegendImage;
ImageButton BtnMore;
ImageButton BtnY2;
ImageButton BtnTL;
}
我的onClick
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
((ImageButton)((LinearLayout) arg1).getChildAt(0).findViewById(R.id.btnMore)).setTag("1");
((ImageButton)((LinearLayout) arg1).getChildAt(0).findViewById(R.id.btnMore)).setVisibility(View.VISIBLE);
ImageView imgLegend = ((ImageView) ((LinearLayout) arg1).getChildAt(0).findViewById(R.id.ImgLegend));
setImageForLegend(imgLegend, info[position].VariableID);
});
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图arg0、视图arg1、内部位置、长arg3){
((ImageButton)((LinearLayout)arg1.getChildAt(0.findViewById(R.id.btnMore)).setTag(“1”);
((ImageButton)((LinearLayout)arg1.getChildAt(0.findViewById(R.id.btnMore)).setVisibility(View.VISIBLE);
ImageView imgLegend=((ImageView)((LinearLayout)arg1.getChildAt(0.findViewById(R.id.imgLegend));
setImageForLegend(imgLegend,信息[position].VariableID);
});
面对问题:
在滚动列表视图选择单行后,一些其他项目显示了我对单行所做的更改。首先,不要使用
array[]
使用bean
类和getter setter
和ArrayList
绑定ListView
项目
参考下面的链接,了解他们是如何使用SQLite数据库定制ListView的
要维护更改,您需要在bean
类中设置更改
您可能需要更改所有代码,但这是唯一可以帮助您的方法
也许我的回答会让你困惑,因为你不知道路。
请按照上面的链接仔细阅读并执行。如何使用
isrolseletd
?暂时不使用它。catch(Exception ex){}是一个非常非常糟糕的主意,你能发布你的onItemClick()吗或者不管你用什么方法来处理行选择?我认为很有趣的是,你的行中有按钮,但是你在听整行而不是按钮上的点击。你能解释一下原因吗?