android - 如何从 RecyclerView 中删除和撤消删除项目
问题描述
我制作文字游戏,我希望能够从编辑文本中删除文本并将其返回到 recyclerview 项目。我做到了,但我的项目编号只是增加或移动一个字段。这是我的代码。这是我已经尝试过的方法,但是正如我在删除项目时提到的,所有项目都移动到一个地方,而不是我尝试删除然后从编辑文本中添加项目,这会导致每次都添加新项目。所以有什么方法可以获取位置存储它然后将其准确地检索到从中获取的位置
@Override
public void onItemClick(View view, int position) {
edit.setText(edit.getText() + adapter.getItem(position).toString().toUpperCase());
edit.toString().toUpperCase();
// mediaPlayer2 = MediaPlayer.create(Asocijacije.this, R.raw.clickbutton);
if(on==true){
MediaPlayerWraper.play(Asocijacije.this,R.raw.clickbutton);
}
for(int i=0;i<suggestSource.size();i++){
//index dr element
ListaSlova.add(i,position);
itemClicked=ListaSlova.get(i);
}
// suggestSource.remove(position);
suggestSource.set(position,"");
simpleArray = new String[suggestSource.size()];
suggestSource.toArray(simpleArray);
recyclerView = findViewById(R.id.recyclerView);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
adapter = new MyRecyclerViewAdapter(this, simpleArray);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
adapter.notifyItemChanged(position);
adapter.notifyItemRangeChanged(position, suggestSource.size());
lvl.setText("lvl: " + String.valueOf(curquestion));
}
public void obrisi() {
// mediaPlayer3 = MediaPlayer.create(Asocijacije.this, R.raw.obrisi);
if(on==true){
MediaPlayerWraper.play(Asocijacije.this,R.raw.obrisi);
}
String text = edit.getText().toString();
tapped+=1;
if (text.length() >= 1) {
edit.setText((text.substring(0, text.length() - 1)));
String lastL = text.substring(text.length() - 1);
suggestSource.remove(ListaSlova.get(itemClicked));
suggestSource.add(ListaSlova.get(itemClicked),lastL);
//suggestSource.remove(itemClicked);
edit.setVisibility(View.VISIBLE);
simpleArray = new String[suggestSource.size()];
suggestSource.toArray(simpleArray);
recyclerView = findViewById(R.id.recyclerView);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
adapter = new MyRecyclerViewAdapter(this, simpleArray);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
// adapter.notifyItemInserted(suggestSource.size() + 1);
// adapter.notifyItemRangeChanged(suggestSource.size() + 1, suggestSource.size());
// adapter.notifyDataSetChanged();
// adapter.notifyItemInserted(suggestSource.size()+1);
} else
edit.setText("");
解决方案
1-您可以在活动类中创建公共静态列表。
2-将其定义为您需要传递给recyclerview的列表。
3-将其作为参数传递给recyclerview以显示。
4-将其放入适配器中。
5-您将拥有适配器中每个项目的位置,该位置与每个元素的索引相同,因此当您需要删除一个项目时,您可以这样做:
list.remove(position);
你会得到它删除。
6-如果您需要保留已删除的项目以供以后显示或任何内容,您可以在您的活动类中为已删除的项目创建另一个列表,在您删除它之前,将其添加到您的另一个列表中。
推荐阅读
- ruby-on-rails - Rail:为什么我会得到这个错误的参数,即 URI 对象或 URI 字符串错误
- html - 我正在使用我的网站中嵌入的字体。第一次需要更多时间加载字体
- python - 未找到“data:image/png;base64,”的连接适配器
- r - 为经纬度点数据设置 CRS
- ruby-on-rails - 我应该使用哪个版本的 rails 6.1.3.2 或 rails 6.1.4(这是最新的)?
- javascript - 如何在没有 jQuery 的情况下使用滚动功能延迟加载 iframe
- android-studio - 在android Studio中运行应用程序需要很长时间
- reactjs - 使用 Public 文件夹中的大量静态文件提高 React App 的性能
- reactjs - WebStorm 认为未使用的常量 getStaticProps 和 getStaticPaths 以及默认导出
- linux - 错误:[scripts/Makefile.modinst:33:arch/x86/crypto/aegis128-aesni.ko]