ListView中的EditText / Checkbox

时间:2014-04-27 02:06:07

标签: android android-layout listview android-listview android-edittext

我正在编写代码以在EditText中插入checkboxListView,并且此CheckBox将仅针对前7行,然后EditText将进来每排。 以下代码适用于第一次查看。但是当我向下滚动视图时... Checkbox而不是EditView。意味着EditText获取隐藏,CheckBox来自我已编写下面的可见性代码。在你出错的地方,你可以帮忙吗?

public View getView(int position, View convertView, ViewGroup parent) {



    View vi=convertView;
    ViewHolder holder;

    if(convertView==null){ 

        /********** Inflate tabitem.xml file for each row ( Defined below ) ************/
        vi = inflater.inflate(R.layout.tabitem, null); 

        /******** View Holder Object to contain tabitem.xml file elements ************/
        holder=new ViewHolder();
        holder.text=(TextView)vi.findViewById(R.id.textView1);

        holder.check =(CheckBox)vi.findViewById(R.id.checkBox1);
         holder.text2=(EditText)vi.findViewById(R.id.editText1);
          holder.text2.setTag(1);
       int position12 = (Integer)holder.text2.getTag();
       System.out.print(position12 + "value");

       /************  Set holder with LayoutInflater ************/
        vi.setTag(holder);


        j++;

        if(j<8){
       holder.text2.setVisibility(View.INVISIBLE);
       holder.check.setX(-150);
        }else
        {
             holder.check.setVisibility(View.INVISIBLE);
        }



    }
    else  
        holder=(ViewHolder)vi.getTag();

    holder.text2.getText();
       if(data.size()<=0)
    {
        holder.text.setText("No Data");

        holder.text2.getText();
 //        Log.v("BBBB",  holder.text2.getText().toString());

    }
    else
    {
        /***** Get each Model object from Arraylist ********/
        tempValues=null;
        tempValues = (ListModel) data.get(position);

        /************  Set Model values in Holder elements ***********/
         holder.text.setText(tempValues.getCompanyName());

         holder.text2.getText();
                         /******** Set Item Click Listner for LayoutInflater for each row ***********/
         vi.setOnClickListener(new OnItemClickListener(position));
    }

    Log.v("DDD",  holder.text2.getText().toString());
    return vi;
}

2 个答案:

答案 0 :(得分:0)

这是ListView行为,因为recycles视图。问题是ListView正在重复使用其他子项的第一个可见项视图。

您可以通过告知ListView您有两种不同类型的视图来解决此问题。如果您查看BaseAdapter getViewTypeCount()方法,则返回计数为1。

因此您需要覆盖自定义适配器中的getViewTypeCount()并返回您有两个不同的视图。

@Override
public int getViewTypeCount() {
    return 2;
}

并且,getItemViewType()默认返回0.但您的商品< 8与其他商品不同,请告诉ListView您的商品位置&lt; 8是不同的类型,如下

@Override
public int getItemViewType(int position) {
    if(position <8)
            return 0;
        else
            return 1;
}

编辑:

如果您需要在EditText的{​​{1}}中输入ListView

的清单中设置android:windowSoftInputMode =“adjustPan”

此外,项目视图应具有不同的视图类型,否则当您滚动时,您将在Activity的其他列表项中看到输入的文本。这是由于视图的循环而发生的。

您可以通过将EditText作为列表计数

返回来解决此问题
getViewTypeCount

并更改 public int getViewTypeCount() { return getCount(); } 以返回唯一ID,例如,position是唯一编号

getItemViewType

答案 1 :(得分:0)

您必须在visibility内明确定义元素的adapter。更改您的adapter代码,如下所示:

public View getView(int position, View convertView, ViewGroup parent) {



    View vi=convertView;
    ViewHolder holder;

    if(convertView==null){ 

        /********** Inflate tabitem.xml file for each row ( Defined below ) ************/
        vi = inflater.inflate(R.layout.tabitem, null); 

        /******** View Holder Object to contain tabitem.xml file elements ************/
        holder=new ViewHolder();
        holder.text=(TextView)vi.findViewById(R.id.textView1);

        holder.check =(CheckBox)vi.findViewById(R.id.checkBox1);
         holder.text2=(EditText)vi.findViewById(R.id.editText1);
          holder.text2.setTag(1);
       int position12 = (Integer)holder.text2.getTag();
       System.out.print(position12 + "value");

       /************  Set holder with LayoutInflater ************/
        vi.setTag(holder);


        j++;

        if(j<8){
             holder.text2.setVisibility(View.INVISIBLE);
             holder.check.setX(-150);
             holder.check.setVisibility(View.VISIBLE);
        }else
        {
             holder.check.setVisibility(View.INVISIBLE);
             holder.text2.setVisibility(View.VISIBLE);
        }



    }
    else  
        holder=(ViewHolder)vi.getTag();

    holder.text2.getText();
       if(data.size()<=0)
    {
        holder.text.setText("No Data");

        holder.text2.getText();
 //        Log.v("BBBB",  holder.text2.getText().toString());

    }
    else
    {
        /***** Get each Model object from Arraylist ********/
        tempValues=null;
        tempValues = (ListModel) data.get(position);

        /************  Set Model values in Holder elements ***********/
         holder.text.setText(tempValues.getCompanyName());

         holder.text2.getText();
                         /******** Set Item Click Listner for LayoutInflater for each row ***********/
         vi.setOnClickListener(new OnItemClickListener(position));
    }

    Log.v("DDD",  holder.text2.getText().toString());
    return vi;
}

这可能会对你有帮助。