我正在编写代码以在EditText
中插入checkbox
和ListView
,并且此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;
}
答案 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
此外,项目视图应具有不同的视图类型,否则当您滚动时,您将在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;
}
这可能会对你有帮助。