Scrolling的列表视图中的问题,当一行包含的TextView和EditText上 [英] Scrooling issue in Listview when single row contain TextView and EditText

查看:199
本文介绍了Scrolling的列表视图中的问题,当一行包含的TextView和EditText上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个单行包含的TextView 的EditText ,最初的EditText 是看不见的,当单列用户水龙头列表视图然后EditText上变得可见,如果EditText上是可见的指定位置,然后,当用户敲击再然后的EditText成为看不见的。

我能够做一个切换到的EditText当用户点击,但我不能够知道什么时候的EditText是可见的,用户双击自动滚屏那么其他的EditText其他一些位置也同时滚动,这是不被窃听变得可见用户在该位置。

 公共类TypeOfTruckAdapter延伸BaseAdapter {
    清单< TypeTruckPogo>清单;
    上下文语境;
    LayoutInflater吹气;
    公众的String []当前;
    TypeTruckPogo typeTruckPogo;
    公共静态HashMap的<整数,字符串> truckHashMap =新的HashMap<整数,字符串>();
    公共TypeOfTruckAdapter(上下文的背景下,列表与LT; TypeTruckPogo>名单){
        this.list =清单;
        this.context =背景;
        的for(int i = 0; I<则为list.size();我++)
        {
            truckHashMap.put(ⅰ,);
        }
    }
    @覆盖
    公众诠释的getCount(){
        // TODO自动生成方法存根
        返回则为list.size();
    }    @覆盖
    公共对象的getItem(INT为arg0){
        // TODO自动生成方法存根
        返回null;
    }    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回的位置;
    }    类Viewholder {
        TextView的名称;
        的EditText nmbrOfTruck;
        诠释参考;        Viewholder(查看视图){            名称=(TextView中)view.findViewById(R.id.textView1);
            nmbrOfTruck =(EditText上)view.findViewById(R.id.et_nmbr_of_truck_id);
        }    }
    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
        最后Viewholder持有人;
        typeTruckPogo = list.get(位置);
        如果(convertView == NULL){
            吹气=(LayoutInflater)上下文
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);            convertView = inflater.inflate(R.layout.single_row_for_type_of_truck,父母,假);
            持有人=新Viewholder(convertView);
            convertView.setTag(保持器);
        }其他{
            支架=(Viewholder)convertView.getTag();
        }
        //对于零的位置,我必须设置文本颜色为蓝色,否则深灰色
        如果(位置== 0){
            holder.name.setTextColor(context.getResources()的getColor(R.color.blue_color));
        }其他{
            holder.name.setTextColor(context.getResources()的getColor(R.color.darkgray));
        }
        //设置在TextView的名字
        holder.name.setText(list.get(位置).getTypeOfTruckName());
        //设置上的EditText标签
        holder.nmbrOfTruck.setTag(位置);
        //设置viewholder位置
        holder.ref =位置;       //点​​击列表视图作出的EditText出现(最初的EditText是invisiable)
        //如果的EditText是visiable使其invisiable,如果它是invisiable使它visiable
        convertView.setOnClickListener(新View.OnClickListener(){            @覆盖
            公共无效的onClick(视图v){                如果(v.findViewById(R.id.et_nmbr_of_truck_id).getVisibility()== View.VISIBLE){
                    v.findViewById(R.id.et_nmbr_of_truck_id).setVisibility(View.INVISIBLE);
                }其他{
                    v.findViewById(R.id.et_nmbr_of_truck_id).setVisibility(View.VISIBLE);
                }            }
        });
        //如果用户的EditText写在指定位置的用户省去输入
        // truckHashMap是我保存位置为键和值作为用户输入的HashMap        holder.nmbrOfTruck.addTextChangedListener(新TextWatcher(){            公共无效onTextChanged(CharSequence中,诠释开始,
                                      INT之前,诠释计数){            }            公共无效beforeTextChanged(CharSequence中,诠释开始,
                                          诠释计数后INT){
                // TODO自动生成方法存根            }            公共无效afterTextChanged(编辑S){
                电流=新的String [holder.ref]                truckHashMap.put(位置,s.toString()修剪());
            }
        });
        //设置在指定位置的用户输入
        holder.nmbrOfTruck.setText(truckHashMap.get(位置));        Config.colorFont(背景下,空,holder.name,NULL);
        返回convertView;
    }

// single_row_for_type_of_truck

 <?XML版本=1.0编码=UTF-8&GT?;
    < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / LL4
        机器人:方向=垂直
        机器人:layout_width =match_parent
        机器人:layout_height =50dp
       >    <的LinearLayout
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:weightSum =1
        机器人:重力=center_vertical | CENTER_HORIZONTAL        机器人:方向=横向>        <的TextView
            机器人:ID =@ + ID / textView1
            机器人:layout_width =0dp
            机器人:layout_height =match_parent
            机器人:比重=中心|左
            机器人:layout_gravity =中心
            机器人:layout_weight =9
            机器人:填充=@扪/ text_padding
            机器人:文字=TextView的/>
        <的EditText
            机器人:ID =@ + ID / et_nmbr_of_truck_id
            机器人:layout_width =50dp
            机器人:layout_height =25dp
            机器人:填充=2DP
            机器人:背景=@绘制/ rounded_edge_edittext
            机器人:TEXTSIZE =14dp
            机器人:知名度=隐形
            机器人:layout_marginRight =10dp
            机器人:重力=左
            机器人:saveEnabled =真
            机器人:数字=整数
            安卓的inputType =数字
            1:机器人layout_weight = />    < / LinearLayout中>
    <查看
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =1DP
        机器人:背景=@色/浅灰色/>
< / LinearLayout中>


解决方案

尝试创建布尔数组将存储您编辑文本的可见性状态。收藏此code在适配器的constuctor:

 布尔[] = isEditTextVisible新的布尔[则为list.size()];
        的for(int i = 0; I< isEditTextVisible.length;我++){
            isEditTextVisible [I] = FALSE;
        }

修改你的 getView()方法:

  ...            如果(isEditTextVisible [位置]){
                holder.nmbrOfTruck.setVisibility(View.VISIBLE);
            }其他{
                holder.nmbrOfTruck.setVisibility(View.INVISIBLE);
            }            convertView.setOnClickListener(新View.OnClickListener(){                @覆盖
                公共无效的onClick(视图v){                    如果(holder.nmbrOfTruck.isShown()){
                        holder.nmbrOfTruck.setVisibility(View.INVISIBLE);
                        isEditTextVisible [位置] = FALSE;
                    }其他{
                        holder.nmbrOfTruck.setVisibility(View.VISIBLE);
                        isEditTextVisible [位置] =真;
                    }                }
            });
    ...

I have a single row which contain TextView and EditText, Initially EditText is invisible,when user tap on single row of listview then EditText become visible and if EditText is visible for the Specified position then when user tap again then EditText become invisible.

I am able to make a toggle to a EditText when user Tap,but i don't able to know when EditText is visible and user Scrool then other EditText for some other position is also become visible while Scrolling ,which is not tapped by the user for that position.

public class TypeOfTruckAdapter extends BaseAdapter{
    List<TypeTruckPogo> list;
    Context context;
    LayoutInflater inflater;
    public String[] Current;
    TypeTruckPogo typeTruckPogo;
    public static HashMap<Integer,String> truckHashMap=new HashMap<Integer,String>();
    public TypeOfTruckAdapter( Context context,List<TypeTruckPogo> list) {
        this.list = list;
        this.context = context;
        for(int i=0;i<list.size();i++)
        {
            truckHashMap.put(i,"");
        }
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }



    class Viewholder{
        TextView name;
        EditText nmbrOfTruck;
        int ref;

        Viewholder(View view) {

            name = (TextView) view.findViewById(R.id.textView1);
            nmbrOfTruck = (EditText) view.findViewById(R.id.et_nmbr_of_truck_id);
        }

    }
    @Override
    public View getView(final int position, View convertView,  ViewGroup parent) {
        final Viewholder holder;
        typeTruckPogo = list.get(position);
        if(convertView==null){
            inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = inflater.inflate(R.layout.single_row_for_type_of_truck, parent, false);
            holder = new Viewholder(convertView);
            convertView.setTag(holder);
        }else{
            holder = (Viewholder)convertView.getTag();
        }
        // For position zero i have to set the text color to blue color,else dark gray color
        if(position==0){
            holder.name.setTextColor(context.getResources().getColor(R.color.blue_color));
        }else{
            holder.name.setTextColor(context.getResources().getColor(R.color.darkgray));
        }
        // setting the name on the textview
        holder.name.setText(list.get(position).getTypeOfTruckName());
        //setting the tag on edittext
        holder.nmbrOfTruck.setTag(position);
        //setting the viewholder position
        holder.ref = position;

       // clicking on listview making edittext to appear (initially edittext is invisiable)
        // if edittext is visiable make it invisiable and if it is invisiable make it visiable
        convertView.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (v.findViewById(R.id.et_nmbr_of_truck_id).getVisibility() == View.VISIBLE) {
                    v.findViewById(R.id.et_nmbr_of_truck_id).setVisibility(View.INVISIBLE);
                } else {
                    v.findViewById(R.id.et_nmbr_of_truck_id).setVisibility(View.VISIBLE);
                }

            }
        });
        // if user write on editText save the input by the user in specified position
        //truckHashMap is hashmap where I saving the position as a key and value as the user Input

        holder.nmbrOfTruck.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start,
                                      int before, int count) {

            }

            public void beforeTextChanged(CharSequence s, int start,
                                          int count, int after) {
                // TODO Auto-generated method stub

            }

            public void afterTextChanged(Editable s) {
                Current = new String[holder.ref];

                truckHashMap.put(position, s.toString().trim());
            }
        });
        // Setting the User Input at specified Position
        holder.nmbrOfTruck.setText(truckHashMap.get(position));

        Config.colorFont(context, null, holder.name, null);
        return convertView;
    }

// single_row_for_type_of_truck

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll4"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="50dp"
       >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="1"
        android:gravity="center_vertical|center_horizontal"

        android:orientation="horizontal">

        <TextView
            android:id="@+id/textView1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:gravity="center|left"
            android:layout_gravity="center"
            android:layout_weight=".9"
            android:padding="@dimen/text_padding"
            android:text="TextView" />


        <EditText
            android:id="@+id/et_nmbr_of_truck_id"
            android:layout_width="50dp"
            android:layout_height="25dp"
            android:padding="2dp"
            android:background="@drawable/rounded_edge_edittext"
            android:textSize="14dp"
            android:visibility="invisible"
            android:layout_marginRight="10dp"
            android:gravity="left"
            android:saveEnabled="true"
            android:numeric="integer"
            android:inputType="number"
            android:layout_weight=".1"/>

    </LinearLayout>
    <View
        android:layout_width="fill_parent"
        android:layout_height="1dp"
        android:background="@color/lightgray"/>


</LinearLayout>

解决方案

Try to create boolean array which will store visibility state of your edit text. Add this code in your adapter's constuctor:

boolean[] isEditTextVisible = new boolean[list.size()];
        for (int i=0; i < isEditTextVisible.length; i++) {
            isEditTextVisible[i] = false;
        }

Modify your getView() method:

    ...

            if (isEditTextVisible[position]){
                holder.nmbrOfTruck.setVisibility(View.VISIBLE);
            } else {
                holder.nmbrOfTruck.setVisibility(View.INVISIBLE);
            }

            convertView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    if (holder.nmbrOfTruck.isShown()) {
                        holder.nmbrOfTruck.setVisibility(View.INVISIBLE);
                        isEditTextVisible[position] = false;
                    } else {
                        holder.nmbrOfTruck.setVisibility(View.VISIBLE);
                        isEditTextVisible[position] = true;
                    }

                }
            });
    ...

这篇关于Scrolling的列表视图中的问题,当一行包含的TextView和EditText上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆