条件setHint / setText EditText Android

时间:2016-01-20 11:47:46

标签: android listview recycle

也许我的问题有一个简单的解决方案,但我无法找到它。 我有一个ListView与用户列表。每行都有一个EditText来输入用户名。我想为每个用户设置提示文本,例如:“user1,user2,user3等”,用作默认名称。用户可以单击EditText并更改此名称,以便提示文本消失,用户可以输入他的名字,或者保留此默认名称。

当ListView太长时,我遇到了视图回收的问题,它重复了名称。我通过对EditText使用setOnFocusChangeListener来解决它,并为每一行存储名称,并且它工作正常,但是当我有一个很长的列表时,我希望保留用户引入的提示文本或文本滚动列表时每个EditText。

我不知道如何修改我的适配器来为每个EditText设置名称/提示。

有什么想法吗?

非常感谢。

2 个答案:

答案 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>