Java 一个奇怪的RecyclerView故障
我有一个奇怪的小毛病,我很难用语言来解释。所以一个录音来展示它。FAB打开一个具有编辑文本和确认按钮的活动。当按下确认按钮时,写入EditText的名称将添加到RecyclerView in库片段中。但如果你不在EditText上写任何东西,按确认键,它就会加上“Johan”。但问题是,如果您甚至没有单击EditText,它会将Johan添加到ArrayList中,但在您“正确”添加另一个名称或重新启动Players活动之前,它不会显示它 库片段: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
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中添加此项,但最好使用接口和侦听器回调来添加。你可以在这里查一下