![enter image description here](https://i.stack.imgur.com/1CI2W.jpg)
Я прочитал многочисленные темы и документацию по моей проблеме с различными решениями и перепробовал множество их безрезультатно.
У меня есть просмотр карты в обзоре переработчика. Cardview содержит EditView и 1 изображение. За пределами обзора переработчика у меня есть кнопка «Добавить игроков».
ЦЕЛЬ: Нажмите кнопку «Добавить игроков». Добавьте просмотр карты в просмотр рециркулятора, который имеет EditView и 1 Image, и ЗАПРОСИТЕ ФОКУС на EDITVIEW недавно добавленной карты в обзоре реселлера.
Пока что код, который я написал, работает до тех пор, пока вы не добавите 4-ую карту. После добавления 4-го вида карты FOCUS переходит в CardView 1, а не 4-й.
Кнопка Добавить код игрока
btnAddPlayer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerData mLog = new RecyclerData();
mLog.setPlayerName(playerName);
playerListArray.add(mLog);
mRecyclerAdapter.notifyData(playerListArray);
// mRecyclerView.scrollToPosition(playerListArray.size()-1);
// mRecyclerView.smoothScrollToPosition(playerListArray.size()-1);
}
});
}
Код адаптера для добавления нового игрока CardView
public class PlayerListAdapter extends RecyclerView.ViewHolder {
private final EditText playerNameEditText;
private LinearLayout mainLayout;
public ImageView deleteImage;
public PlayerListAdapter(@NonNull View itemView) {
super(itemView);
playerNameEditText = itemView.findViewById(R.id.txtPlayersName);
//playerNameEditText.requestFocus(getAdapterPosition());
playerNameEditText.requestFocus(mLastPosition);
playerNameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
playerListArray.get(getAdapterPosition()).setPlayerName(playerNameEditText.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
Как вы можете видеть в приведенных выше 2 фрагментах кода, я пробовал другие варианты, и ни один из них не работает.
Как я уже говорил, мое решение работает, но только для первых 3, после этого оно бесполезно, и как только вы go пропустите 4-й пункт, тогда возникает спораци c относительно того, кто действительно получит фокус .
ПОЛНЫЙ КОД АДАПТЕРА
public class Adapter extends RecyclerView.Adapter<Adapter.PlayerListAdapter> {
private static final String LOG_TAG = Adapter.class.getSimpleName() ;
private ArrayList<RecyclerData> playerListArray;
int mLastPosition = 0;
private RemoveClickListner mListner;
public Adapter(ArrayList<RecyclerData> playerListArray, RemoveClickListner mListner) {
this.playerListArray = playerListArray;
this.mListner = mListner;
}
@NonNull
@Override
public PlayerListAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item,
parent,
false);
PlayerListAdapter viewHolder = new PlayerListAdapter(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull PlayerListAdapter holder, int position) {
Log.d("His problem here is: ", playerListArray.size() + "");
RecyclerData playerData = playerListArray.get(position);
Log.d("Title is: ", playerData.playerName + "");
mLastPosition = position;
holder.playerNameEditText.setText(playerData.playerName);
holder.playerNameEditText.setHint("Player: " + (position + 1));
holder.deleteImage.setImageResource(R.drawable.delete);
}
public void notifyData(ArrayList<RecyclerData> playerListArray) {
this.playerListArray = playerListArray;
Log.d("notifyData ", playerListArray.size() + "");
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return(null != playerListArray?playerListArray.size():0);
}
public class PlayerListAdapter extends RecyclerView.ViewHolder {
private final EditText playerNameEditText;
private LinearLayout mainLayout;
public ImageView deleteImage;
public PlayerListAdapter(@NonNull View itemView) {
super(itemView);
playerNameEditText = itemView.findViewById(R.id.txtPlayersName);
//playerNameEditText.requestFocus(getAdapterPosition());
//playerNameEditText.requestFocus(mLastPosition);
playerNameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
playerListArray.get(getAdapterPosition()).setPlayerName(playerNameEditText.getText().toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
deleteImage = (ImageView) itemView.findViewById(R.id.deleteimage);
deleteImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mListner.OnRemoveClick(getAdapterPosition());
}
});
}
}
}
ПОЛНЫЙ КОД ОСНОВНОЙ АКТИВНОСТИ
public class MainActivity extends AppCompatActivity implements RemoveClickListner{
private RecyclerView mRecyclerView;
private Adapter mRecyclerAdapter;
private RecyclerView.LayoutManager mLayoutManager;
Button btnAddPlayer;
ArrayList<RecyclerData> playerListArray = new ArrayList<>();
String playerName = "";
ImageView deleteImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerAdapter = new Adapter(playerListArray,this);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getApplicationContext(), 2);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mRecyclerAdapter);
if (mRecyclerAdapter.getItemCount() == 0 || mRecyclerAdapter.getItemCount() == NULL){
Toast.makeText(getApplicationContext(),"ZERO ITEMS LISTED",Toast.LENGTH_SHORT).show();
}
btnAddPlayer = (Button) findViewById(R.id.btnAddPlayer);
btnAddPlayer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerData mLog = new RecyclerData();
mLog.setPlayerName(playerName);
playerListArray.add(mLog);
mRecyclerAdapter.notifyData(playerListArray);
// mRecyclerView.scrollToPosition(playerListArray.size()-1);
// mRecyclerView.smoothScrollToPosition(playerListArray.size()-1);
}
});
}
@Override
public void OnRemoveClick(int index) {
playerListArray.remove(index);
mRecyclerAdapter.notifyData(playerListArray);
}
}