使用EditText

时间:2015-12-06 19:07:28

标签: android android-fragments android-recyclerview android-adapter recycler-adapter

好的,我的问题是保存编辑文本的输入。 我有一个回收站视图,里面有一些编辑文本。我有一个适配器和按钮"添加"添加另一个新的编辑文本。有一个问题,因为如果我在一个编辑文本中写了一些内容,当我改变焦点或者我开始注意时,它并不会总是保存。添加"按钮。

这是我的托管片段:

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(view.getContext());
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new AddPlayerAdapter(players);
mRecyclerView.setAdapter(mAdapter);

addButton.setOnClickListener {
    // overrides
    players.add(new Player(""));
    mAdapter.notifyDataSetChanged();
}

所以现在,点击"添加"按钮新的播放器类被添加到类播放器(项目播放器)并通知适配器,我在屏幕上看到添加了新项目(在AddPlayerViewHolder中声明)。它工作正常。

以下是我的适配器类的片段:

public AddPlayerAdapter(Players players) {
    this.players = players;
}

@Override
public AddPlayerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.add_player, parent, false);
    return new AddPlayerViewHolder(v);
}

@Override
public void onBindViewHolder(final AddPlayerViewHolder holder, final int position) {

    holder.name.setText(players.get(position).getName());

    holder.name.setHint("Player " + Integer.toString(position+1));

    holder.name.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            if (view != null) players.get(position).setName(holder.name.getText().toString());
        }
    });
}

因此,每次焦点更改时,字段都会更新,并且应包含实际数据。

但是,当我在一个编辑文本中放入一些数据时,请按"开始"按钮(用&#34打开另一个片段;玩家"数据)焦点不会丢失,数据也不会更新。所以,我认为使用OnFocusChangeListener的想法是错误的,但我在这里看不到更好的东西。

你们中的任何人都可以让我在编辑文本框中找到正确更新数据的示例吗?

1 个答案:

答案 0 :(得分:0)

我认为这是常见问题,希望有人对解决方案感兴趣。

您只需添加TextWatcher即可保存输入的播放器名称。

public class EditTextSaverWatcher implements TextWatcher {

    private Player player;

    public MyTextWatcher(Player player) {
        this.player= player;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Another option is to save name here
    }

    @Override
    public void afterTextChanged(Editable s) {
        player.setName(s.toString());
    }
}

要添加文本观察器,您应该使用

editText.addTextChangedListener(new EditTextSaverWatcher(concretePlayer));