也许我的问题有一个简单的解决方案,但我无法找到它。 我有一个ListView与用户列表。每行都有一个EditText来输入用户名。我想为每个用户设置提示文本,例如:“user1,user2,user3等”,用作默认名称。用户可以单击EditText并更改此名称,以便提示文本消失,用户可以输入他的名字,或者保留此默认名称。
当ListView太长时,我遇到了视图回收的问题,它重复了名称。我通过对EditText使用setOnFocusChangeListener来解决它,并为每一行存储名称,并且它工作正常,但是当我有一个很长的列表时,我希望保留用户引入的提示文本或文本滚动列表时每个EditText。
我不知道如何修改我的适配器来为每个EditText设置名称/提示。
有什么想法吗?
非常感谢。
答案 0 :(得分:0)
在您的活动中创建一个列表
List<String> yourlist = new ArrayList();
yourlist.add("user1");
yourlist.add("user2");
yourlist.add("user3");....
将此列表传递给适配器,然后传递给适配器,
holder.youredittext.setHint(yourlist.get(position));
如果您将项目传递给适配器,则创建一个模型类,然后传递给适配器。
答案 1 :(得分:0)
我有一个这样的适配器:
public View getView(final int position, View convertView, ViewGroup parent)
{
View item = convertView;
if(item == null)
{
LayoutInflater inflater = context.getLayoutInflater();
item = inflater.inflate(R.layout.setup_jugador, null);
holder = new ViewHolder();
holder.nombre = (EditText) item.findViewById(R.id.nombre);
// Establecemos el tag
item.setTag(holder);
}
else
{
holder = (ViewHolder)item.getTag();
}
holder.nombre.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
EditText et = (EditText) v.findViewById(R.id.nombre);
// Here I store the name
jugadores.get(position).setNombre(et.getText().toString());
}
}
});
// Update EditText
holder.nombre.setText(jugadores.get(position).getNombre());
// Another option is
holder.nombre.setHint(jugadores.get(position).getNombre());
return(item);
}
jugadores 是一个存储名称的列表。最初它有user1,user2等。 我可以在Item == null时设置提示,但我必须更新适配器末尾的文本,并且在滚动时,视图回收会更改不可见的项目。
我只看到8个项目,滚动时,如果我更改第一个项目,项目编号9也会改变。如果我使用setText,它将变为黑色,如果我使用setHint,则第一个项目变为灰色。
我无法在布局中添加提示值,因为我想将行号添加到名称中。我尝试在适配器中用作模型的类中使用布尔值来显示名称已被修改,使用列表中的位置索引检查此值,并根据使用setText或setHint,但不起作用。 / p>