Java 一个奇怪的RecyclerView故障

Java 一个奇怪的RecyclerView故障,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我有一个奇怪的小毛病,我很难用语言来解释。所以一个录音来展示它。FAB打开一个具有编辑文本和确认按钮的活动。当按下确认按钮时,写入EditText的名称将添加到RecyclerView in库片段中。但如果你不在EditText上写任何东西,按确认键,它就会加上“Johan”。但问题是,如果您甚至没有单击EditText,它会将Johan添加到ArrayList中,但在您“正确”添加另一个名称或重新启动Players活动之前,它不会显示它 库片段: public class Setupplaye

我有一个奇怪的小毛病,我很难用语言来解释。所以一个录音来展示它。FAB打开一个具有编辑文本和确认按钮的活动。当按下确认按钮时,写入EditText的名称将添加到RecyclerView in库片段中。但如果你不在EditText上写任何东西,按确认键,它就会加上“Johan”。但问题是,如果您甚至没有单击EditText,它会将Johan添加到ArrayList中,但在您“正确”添加另一个名称或重新启动Players活动之前,它不会显示它

库片段:

public class SetupplayerLibraryFragment extends Fragment {

private static String TAG = "SetupplayerLibraryFragment";
static View view;

InternalOperator IO;

RecyclerView libraryList;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager manager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    view = inflater.inflate(R.layout.fragment_setupplayer_library, container, false);

    libraryList = view.findViewById(R.id.libraryList);
    libraryList.addItemDecoration(new DividerItemDecoration(libraryList.getContext(), DividerItemDecoration.VERTICAL));

    manager = new LinearLayoutManager(getActivity());
    adapter = new PlayerAdapter(IO.players);
    libraryList.setLayoutManager(manager);
    libraryList.setAdapter(adapter);

    return view;
}
}
新玩家活动:

public class SetupplayerAddActivity extends AppCompatActivity {

private static String TAG = "SetupplayerAddActivity";

EditText nameText;
Button confirmButton;
Toolbar toolbar;

InternalOperator IO;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setupplayer_add);

    nameText = findViewById(R.id.text_add_name);
    confirmButton = findViewById(R.id.button_add_confirm);


    confirmButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (nameText.getText().length() != 0) {
                if (ContextCompat.checkSelfPermission(SetupplayerAddActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                    nameText.clearComposingText();
                    ExternalOperator.savePlayers(nameText.getText().toString());
                    IO.players.add(new Player(nameText.getText().toString(), 0));
                    finish();
                } else {
                    Toast.makeText(SetupplayerAddActivity.this, "Permission to use storage is needed for this action!", Toast.LENGTH_SHORT).show();
                }
            } else {
                if (ContextCompat.checkSelfPermission(SetupplayerAddActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
                    ExternalOperator.savePlayers("Johan");
                    IO.players.add(new Player("Johan", 0));
                    finish();//Activityi kapıyor
                } else {
                    Toast.makeText(SetupplayerAddActivity.this, "You are really the Johan! Radiance save us!", Toast.LENGTH_SHORT).show();
                }
            }
        }
    });

}

}

我删除了一些无用的代码以使其更加清晰。

每次添加、删除或更新填充RecyclerView的列表时,都必须调用
RecyclerView.Adapter.notifyDataSetChanged()
,以使其了解更改

比如说

IO.players.add(new Player(nameText.getText().toString(), 0));
adapter.notifyDataSetChanged().

成功了!但我有话要说。1-为什么我没有点击时它不工作?2-完整的代码是libraryList.getAdapter().notifyDataSetChanged(),因此我将编辑您的答案并添加它。3-我在库片段的onResume方法中添加了代码,这会导致问题吗?@Brogolem35 1.recycler视图在必要时才会更新视图。因此,如果某些内容发生更改,您必须将更改的内容通知适配器。这是如何设计的。您可以在resume中添加此项,但最好使用接口和侦听器回调来添加。你可以在这里查一下