Android 如何在新活动中显示已删除的项目?
我有一个工作代码,它使用json api并在recyclerview中显示它们。我还添加了ItemTouchHelper,用于滑动删除操作。现在我想在新活动中显示已删除的项目。我该怎么做?谢谢 My MainActivity.java如下所示:Android 如何在新活动中显示已删除的项目?,android,json,api,android-recyclerview,Android,Json,Api,Android Recyclerview,我有一个工作代码,它使用json api并在recyclerview中显示它们。我还添加了ItemTouchHelper,用于滑动删除操作。现在我想在新活动中显示已删除的项目。我该怎么做?谢谢 My MainActivity.java如下所示: public class MainActivity extends AppCompatActivity implements RecyclerItemTouchHelperListener { private final String URL_API
public class MainActivity extends AppCompatActivity implements RecyclerItemTouchHelperListener {
private final String URL_API = "https://api.openbrewerydb.org/breweries";
private RecyclerView recyclerView;
private List<Item> list;
private CardListAdapter adapter;
private CoordinatorLayout rootLayout;
IMenuRequest mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mService = Common.getMenuRequest();
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Breweries");
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
recyclerView = (RecyclerView)findViewById(R.id.recycler_view);
rootLayout = (CoordinatorLayout)findViewById(R.id.rootLayout);
list = new ArrayList<>();
adapter = new CardListAdapter(this,list);
RecyclerView.LayoutManager layoutManager = new
LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.addItemDecoration(new DividerItemDecoration(this,
DividerItemDecoration.VERTICAL));
recyclerView.setAdapter(adapter);
ItemTouchHelper.SimpleCallback itemTouchHelperCallBack
=new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
new
ItemTouchHelper(itemTouchHelperCallBack).attachToRecyclerView(recyclerView);
addItem();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == R.id.show_deleted) {
Intent myintent = new Intent(MainActivity.this,
NewActivity.class);
startActivity(myintent);
return false;
}
return super.onOptionsItemSelected(item);
}
private void addItem() {
mService.getMenuList(URL_API)
.enqueue(new Callback<List<Item>>() {
@Override
public void onResponse(Call<List<Item>> call,
Response<List<Item>> response) {
list.clear();
list.addAll(response.body());
adapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<List<Item>> call, Throwable t) {
}
});
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int
position) {
if(viewHolder instanceof CardListAdapter.MyViewHolder){
String name = list.get(viewHolder.getAdapterPosition()).getName();
final Item deletedItem = list.get(viewHolder.getAdapterPosition());
final int deleteIndex = viewHolder.getAdapterPosition();
adapter.removeItem(deleteIndex);
Snackbar snackbar = Snackbar.make(rootLayout, name + " removed from
list!", Snackbar.LENGTH_LONG);
snackbar.setAction("UNDO", new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.restoreItem(deletedItem, deleteIndex);
}
});
snackbar.setActionTextColor(Color.YELLOW);
snackbar.show();
}
}
}
公共类MainActivity扩展AppCompative实现RecyclerItemTouchHelperListener{
私有最终字符串URL_API=”https://api.openbrewerydb.org/breweries";
私人回收站;
私人名单;
私有卡列表适配器;
私人协调人布局图;
IMenuRequest mService;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mService=Common.getMenuRequest();
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“酿酒厂”);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
rootLayout=(CoordinatorLayout)findViewById(R.id.rootLayout);
列表=新的ArrayList();
适配器=新的CardListAdapter(此,列表);
RecyclerView.LayoutManager LayoutManager=新建
直线布局经理(本公司);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.addItemDecoration(新的DividerItemDecoration)(此,
DividerItemDecoration.VERTICAL);
recyclerView.setAdapter(适配器);
ItemTouchHelper.SimpleCallback itemTouchHelperCallBack
=新的RecyclerItemTouchHelper(0,ItemTouchHelper.LEFT,this);
新的
ItemTouchHelper(itemTouchHelperCallBack).attachToRecyclerView(recyclerView);
addItem();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.show\u已删除){
Intent myintent=新Intent(MainActivity.this,
新活动(课堂);
星触觉(myintent);
返回false;
}
返回super.onOptionsItemSelected(项目);
}
私有void addItem(){
mService.getMenuList(URL\uAPI)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用,
回应(回应){
list.clear();
list.addAll(response.body());
adapter.notifyDataSetChanged();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
@凌驾
公共空间(RecyclerView.ViewHolder ViewHolder,int方向,int
(职位){
if(CardListAdapter.MyViewHolder的viewHolder实例){
字符串名称=list.get(viewHolder.getAdapterPosition()).getName();
最后一项deletedItem=list.get(viewHolder.getAdapterPosition());
final int deleteIndex=viewHolder.getAdapterPosition();
adapter.removeItem(删除索引);
Snackbar Snackbar=Snackbar.make(rootLayout,name+)已从中删除
列表!”,Snackbar.LENGTH_LONG);
snackbar.setAction(“UNDO”,new View.OnClickListener()){
@凌驾
公共void onClick(视图v){
adapter.restoreItem(deletedItem,deleteIndex);
}
});
snackbar.setActionTextColor(Color.YELLOW);
snackbar.show();
}
}
}
您必须执行以下步骤:
1) 首先,您必须在Item类中实现Serializable
,如下所示
public class Item implements Serializable{
...
}
2) 在您的onCreate
方法中定义一个数组列表,如下所示
private List<Item> removedItems;
3) 在适配器.removietem(deleteIndex)
4) 在此代码之后adapter.restoreItem(deletedItem,deleteIndex)
;编写以下代码
removedItems.remove(deletedItem);
intent.putExtra("data", (ArrayList<Item>) removedItems);
5) 在onOptionsItemSelected
methode调用前startActivity
method编写下面的代码
removedItems.remove(deletedItem);
intent.putExtra("data", (ArrayList<Item>) removedItems);
在数据库中添加删除的项目,并在新活动中从数据库中获取所有删除的项目。我认为您需要创建数据库表并在其中存储删除的项目。在其他活动中显示项目…感谢快速回复。你能分享一些例子吗?再次感谢..一切都很好,但第6位。。如何添加该代码以显示列表?你也能帮我吗?谢谢
ArrayList<Item> list =(ArrayList<Item>)getIntent().getSerializableExtra("data");