如何从RecyclerView中的EditText获取字符串值?(How to get a string value from an EditText in RecyclerView?)

编程入门 行业动态 更新时间:2024-10-23 16:16:44
如何从RecyclerView中的EditText获取字符串值?(How to get a string value from an EditText in RecyclerView?)

我正试图在我的活动中从回收者视图中获取玩家名称,其中有X个edittexts。 我已经尝试使用TextChangedListener将名称添加到玩家名称的ArrayList中,但我得到了每一步(即:B,Bo,Bob,D,Da,Dav,Davi,David),而我只想获得最后的字符串值(只有全名?我怎么能修改TextChangedListener呢?还有其他的吗?

干杯;

package com.olirwin.spartacus.deutsch; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class Main2Activity extends AppCompatActivity { RecyclerView mPlayerList; List<String> mPlayerNames; PlayerAdapter mAdapter; EditText mInput; Button mCreateButton; Button submitButton; ArrayList<String> names; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mPlayerNames = new ArrayList<>(); // setup recycler view mPlayerList = findViewById(R.id.player_list); mPlayerList.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new PlayerAdapter(); mPlayerList.setAdapter(mAdapter); // setup input EditText mInput = findViewById(R.id.input); // setup Create button mCreateButton = findViewById(R.id.create_button); mCreateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // clear old player names mPlayerNames.clear(); // read user input: number of player: String input = mInput.getText().toString(); int numberOfPlayer; try { numberOfPlayer = Integer.parseInt(input); } catch (NumberFormatException e) { Toast.makeText(Main2Activity.this, "Invalid input!!!", Toast.LENGTH_SHORT).show(); return; } for (int i = 0; i < numberOfPlayer; ++i) { mPlayerNames.add("Player #" + (i + 1)); } // make change on recycler view mAdapter.notifyDataSetChanged(); // dismiss keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mInput.getWindowToken(), 0); } }); //setup submit submitButton = findViewById(R.id.submit); submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { names = mAdapter.getNames(); Intent intent = new Intent(v.getContext(), Score.class); intent.putStringArrayListExtra("names", names); v.getContext().startActivity(intent); } }); } private class PlayerAdapter extends RecyclerView.Adapter<PlayerAdapter.PlayerHolder> { private ArrayList<String> names; private String string; public PlayerAdapter() { names = new ArrayList<>(); } @Override public PlayerHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(Main2Activity.this).inflate(R.layout.item_layout, parent, false); return new PlayerHolder(v); } @Override public void onBindViewHolder(final PlayerHolder holder, int position) { holder.bind(mPlayerNames.get(position)); holder.mPlayerName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //blank } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //blank; } @Override public void afterTextChanged(Editable s) { names.add(holder.mPlayerName.getText().toString()); } }); } @Override public int getItemCount() { return mPlayerNames.size(); } public ArrayList<String> getNames(){ return this.names; } public class PlayerHolder extends RecyclerView.ViewHolder { TextView mPlayerLabel; EditText mPlayerName; public PlayerHolder(View itemView) { super(itemView); mPlayerLabel = itemView.findViewById(R.id.player_label); mPlayerName = itemView.findViewById(R.id.player_name); } public void bind(String playerName) { mPlayerLabel.setText(playerName); mPlayerName.setHint("Name of " + playerName); } } } }

I'm trying to get player names from a recycler view in my activity, where there are X edittexts. I have tried using a TextChangedListener to add names to an ArrayList of player names, but I get every single step (ie : B, Bo, Bob, D, Da, Dav, Davi, David), and I'm trying to only get the final string value (only the full name ? How can I modify the TextChangedListener for that ? Is there another of doing it ?

Cheers;

package com.olirwin.spartacus.deutsch; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class Main2Activity extends AppCompatActivity { RecyclerView mPlayerList; List<String> mPlayerNames; PlayerAdapter mAdapter; EditText mInput; Button mCreateButton; Button submitButton; ArrayList<String> names; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mPlayerNames = new ArrayList<>(); // setup recycler view mPlayerList = findViewById(R.id.player_list); mPlayerList.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new PlayerAdapter(); mPlayerList.setAdapter(mAdapter); // setup input EditText mInput = findViewById(R.id.input); // setup Create button mCreateButton = findViewById(R.id.create_button); mCreateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // clear old player names mPlayerNames.clear(); // read user input: number of player: String input = mInput.getText().toString(); int numberOfPlayer; try { numberOfPlayer = Integer.parseInt(input); } catch (NumberFormatException e) { Toast.makeText(Main2Activity.this, "Invalid input!!!", Toast.LENGTH_SHORT).show(); return; } for (int i = 0; i < numberOfPlayer; ++i) { mPlayerNames.add("Player #" + (i + 1)); } // make change on recycler view mAdapter.notifyDataSetChanged(); // dismiss keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mInput.getWindowToken(), 0); } }); //setup submit submitButton = findViewById(R.id.submit); submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { names = mAdapter.getNames(); Intent intent = new Intent(v.getContext(), Score.class); intent.putStringArrayListExtra("names", names); v.getContext().startActivity(intent); } }); } private class PlayerAdapter extends RecyclerView.Adapter<PlayerAdapter.PlayerHolder> { private ArrayList<String> names; private String string; public PlayerAdapter() { names = new ArrayList<>(); } @Override public PlayerHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(Main2Activity.this).inflate(R.layout.item_layout, parent, false); return new PlayerHolder(v); } @Override public void onBindViewHolder(final PlayerHolder holder, int position) { holder.bind(mPlayerNames.get(position)); holder.mPlayerName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //blank } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //blank; } @Override public void afterTextChanged(Editable s) { names.add(holder.mPlayerName.getText().toString()); } }); } @Override public int getItemCount() { return mPlayerNames.size(); } public ArrayList<String> getNames(){ return this.names; } public class PlayerHolder extends RecyclerView.ViewHolder { TextView mPlayerLabel; EditText mPlayerName; public PlayerHolder(View itemView) { super(itemView); mPlayerLabel = itemView.findViewById(R.id.player_label); mPlayerName = itemView.findViewById(R.id.player_name); } public void bind(String playerName) { mPlayerLabel.setText(playerName); mPlayerName.setHint("Name of " + playerName); } } } }

最满意答案

创建一个HashMap,其中Item位置为键

HashMap<Integer, String> map = new HashMap<>;

更改你的内容

@Override public void afterTextChanged(Editable s) { String value = map.get(position); // here position is the key if (value != null) { map.put(position, holder.mPlayerName.getText().toString()); } else { // Key might be present... if (map.containsKey(key)) { // Okay, there's a key but the value is null } else { // Definitely no such key } } }

然后使用HashMap中的get()方法获取HashMap值。

Create a HashMap with Item position as key

HashMap<Integer, String> map = new HashMap<>;

Change the entry inside your

@Override public void afterTextChanged(Editable s) { String value = map.get(position); // here position is the key if (value != null) { map.put(position, holder.mPlayerName.getText().toString()); } else { // Key might be present... if (map.containsKey(key)) { // Okay, there's a key but the value is null } else { // Definitely no such key } } }

then get HashMap values using get() method from HashMap.

更多推荐

本文发布于:2023-08-05 19:40:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1437851.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串值   RecyclerView   EditText   string

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!