Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在新活动中显示已删除的项目?_Android_Json_Api_Android Recyclerview - Fatal编程技术网

Android 如何在新活动中显示已删除的项目?

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

我有一个工作代码,它使用json api并在recyclerview中显示它们。我还添加了ItemTouchHelper,用于滑动删除操作。现在我想在新活动中显示已删除的项目。我该怎么做?谢谢

My MainActivity.java如下所示:

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");