0

我有奇怪的故障,我很难用语言来解释。所以录制了这个视频来展示它。FAB 打开一个具有 EditText 和确认按钮的活动。当您按下确认按钮时,写入 EditText 的名称将被添加到库片段中的 RecyclerView 中。但是,如果您不向 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();
                }
            }
        }
    });

}

}

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

4

1 回答 1

1

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

例如

IO.players.add(new Player(nameText.getText().toString(), 0));
adapter.notifyDataSetChanged().
于 2019-08-11T06:19:22.713 回答