Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动时失去更改的Listview项目_Android_Android Listview - Fatal编程技术网

Android 滚动时失去更改的Listview项目

Android 滚动时失去更改的Listview项目,android,android-listview,Android,Android Listview,我的需要: 我想实现一个变量列表,它可以有动态的行数。 此列表包含3个文本视图、1个图像视图和3个图像按钮 用户可以点击选择一行。长按可选择多个项目。选择时,所选行UI将被更改。所选项目更改其背景和imageview的图像,一个图像按钮将在选择时可见 当用户点击ImageButton时,图像按钮将发生变化,其他图像按钮也将可见 如果某些项目已被选中,并且用户试图通过点击选择单行,则所有其他选定项目都将被删除。listview项应恢复其原始状态。like Imageview将以其默认图像重置,Im

我的需要:

我想实现一个变量列表,它可以有动态的行数。 此列表包含3个文本视图、1个图像视图和3个图像按钮

用户可以点击选择一行。长按可选择多个项目。选择时,所选行UI将被更改。所选项目更改其背景和imageview的图像,一个图像按钮将在选择时可见

当用户点击ImageButton时,图像按钮将发生变化,其他图像按钮也将可见

如果某些项目已被选中,并且用户试图通过点击选择单行,则所有其他选定项目都将被删除。listview项应恢复其原始状态。like Imageview将以其默认图像重置,Imagebutton将消失

我的尝试:

我尝试使用基本适配器实现ListView。根据3个文本视图、1个图像视图和3个图像按钮的需要定义自定义行

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()吗或者不管你用什么方法来处理行选择?我认为很有趣的是,你的行中有按钮,但是你在听整行而不是按钮上的点击。你能解释一下原因吗?