gpt4 book ai didi

android - 带有 EditText 的回收器 View 适配器

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:40 25 4
gpt4 key购买 nike

好的,我的问题是保存编辑文本的输入。我有一个回收站 View ,里面有一些编辑文本。我有一个适配器和按钮“添加”来添加另一个新的编辑文本。有一个问题,因为如果我在一个编辑文本中写了一些东西,当我改变焦点或我点击“添加”按钮时,它并不总是保存。

这是我的托管 fragment :

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();
}

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

这是我的适配器类的 fragment :

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());
}
});
}

所以每次焦点改变时字段都会更新,它应该包含实际数据。

但是,当我将一些数据放入一个编辑文本中,然后按“开始”按钮(这会打开另一个包含“玩家”数据的 fragment )时,焦点不会丢失,数据也不会更新。所以,我认为 OnFocusChangeListener 的想法是错误的,但我看不出这里有什么更好的。

你们中的任何人都可以给我一个像这里这样的编辑文本框内正确更新数据的例子吗?

最佳答案

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

您可以简单地添加 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));

关于android - 带有 EditText 的回收器 View 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34121477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com