在MainActivity中,我有一个CardView项目的RecyclerView列表。
单击任何CardView都会启动DetailsActivity CardView,它显示数据库中该特定CardView的更多数据。
单击DetailsActivity CardView会启动EditActivity来编辑该CardView的数据。单击“保存”按钮将用户返回到DetailsActivity,这样用户就可以看到对该CardView所做的任何编辑更改。CardView项目的模型实现了Parcelable,所以我使用getParcelable()来传递项目及其活动意图中的数据库数据。
我的问题是,在单击“保存”后,用户返回到DetailsActivity CardView,并显示CardView的旧视图(用户刚刚输入并保存到数据库的更新数据之前的视图)。我尝试使用“adapter.notifyDataSetChanged()”来更新视图,但是没有成功。
不知何故,我需要从EditActivity重新加载MainActivity,以便RecyclerView更新适配器,然后将用户返回到更新的DetailsActivity CardView。我可以使用startActivityForResult()吗?我错过了什么?
这是用户界面的进展:
主活动回收视图和适配器:
--Adapter使用回收器ItemClickListener将单击的CardView项目发送回Mainactive,以便我可以使用onItemClick()启动DetailsActive。
--onItemClick()通过一个Intent启动DetailsActivity
细节活动:
-使用onClickListener和启动EditActivity的意图
编辑活动:
-我希望单击“保存”按钮,将新的/更新的CardView数据保存到数据库,并让用户返回到详细活动,以便用户可以看到对CardView的更改。
Adapter
...
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_contact_item, parent, false);
final ItemHolder itemHolder = new ItemHolder(view);
// Attach a Click listener to the items's (row) view.
// itemView is from the ItemHolder().
// onItemClick is the click method in MainActivity.
itemHolder.itemView.setOnClickListener(new View.OnClickListener() {
// Handles the row being clicked.
@Override
public void onClick(View view) {
ListItem adapterItem = MyRecylerAdapter.this.getItem(itemHolder.getAdapterPosition());
if (recyclerItemClickListener != null) {
// pass the item to the Main Activity
// through the RecyclerItemClickListener file and its
// public interface.
recyclerItemClickListener.onItemClick(itemHolder.itemView, adapterItem);
}
}
});
return itemHolder;
}
MainActivity (the RecyclerView Activity)
...
@Override
public void onItemClick(View view, ListItem listItem) {
Intent intent = new Intent(this, DetailsActivity.class);
intent.putExtra("item",listItem);
startActivity(intent);
}
DetailsActivity
...
public class DetailsActivity extends AppCompatActivity {
onCreate(...) {
Bundle extras = getIntent().getExtras();
if (extras != null) {
listItem = extras.getParcelable("item");
}
helper = new SQLiteDB(this);
listItems = new ArrayList<>();
listItems = helper.getAllDBItems();
cvdcardType1 = (TextView) findViewById(R.id.cvdcardType1);
if (listItems !=null && listItems.size() !=0) {
cvdcardType1.setText(listItem.getType());
}
cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(DetailsActivity.this,EditActivity.class);
i.putExtra("cvdItem",listItem);
startActivityForResult(i,REQUEST_CODE);
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == REQUEST_CODE) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
listItem = null;
Bundle returnExtras = getIntent().getExtras();
if (returnExtras != null) {
listItem = returnExtras.getParcelable("returnItem");
if (listItems !=null && listItems.size() !=0) {
cvdcardType1.setText(listItem.getType());
...
}
}
}
else if (resultCode == Activity.RESULT_CANCELED) {
// Finish the startActivityForResult().
finish();
}
}
}
}
EditActivity
public class EditActivity extends AppCompatActivity {
onCreate(...) {
Bundle extras = getIntent().getExtras();
if (extras != null) {
item = extras.getParcelable("cvdItem");
}
}
// "Save Button"
public void onClickSaveEdits(View v) {
// update database
// update RecyclerView adapter and CardView Items
// update DetailsActivity CardView
// return the user to DetailsActivity to see updated CardView
Intent returnIntent = new Intent(EditActivity.this, DetailsActivity.class);
returnIntent.putExtra("returnItem", item);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
简单地说,您可以在编辑详细信息后再次在MainActivity的< code>onResume()中读取数据库项目。
allList = sqLiteDB.getAllDBItems();
adapter.notifyDatasetChanged();
简单地说,从数据库中再次读取列表并重新绘制。并确保您在EditActivity中保存了数据库中的更改
并使用start ActivityForResult()
调用您的EditActive,无论您更改什么,都将其传回setResult();
在 onActivityResult 方法中,DetailActivity 用新值填充数据。
您必须在转向EditActivity的同时完成DetailActivity,然后在onBackPressed()方法中再次启动DetureActivity,如下所示:
Intent intent = new Intent(EditActivity.this, DetailsActivity.class);
intent.putExtra("item",item);
startActivity(intent);
我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong
我有一个IntentService 9:00开始,每小时重复一次。 它与创建捆绑包的AsyncTask一起工作。 IntentService必须在对话框中显示一个活动(就像Viber用于消息一样),它显示此BUNDLE中的一部分数据,并且它必须创建一个显示相同部分数据的通知。如果用户单击通知,它将启动第二个活动,显示BUNDLE中的所有数据。 问题是:IntentService完成他的工作,显示活
但当我刷完后,该物品很快就会从列表中移除!我如何锁定刷过的项目,并通过单击“删除”按钮删除?就像Gmail的行为一样。 ps.I在此发布相同的问题https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=&colspec=id%20type%20status%20owner%20summary%20stars&g
--lesson.java --list_item.xml
本文向大家介绍RecyclerView下拉刷新上拉加载,包括了RecyclerView下拉刷新上拉加载的使用技巧和注意事项,需要的朋友参考一下 一 、前言 最近实在太忙,一个多礼拜没有更新文章了,于是今晚加班加点把demo写出来,现在都12点了才开始写文章。 1.我们的目标 把RecyclerView下拉刷新上拉加载更多加入到我们的开发者头条APP中。 2.效果图 3.实现步骤 找一个带上拉刷新下
删除项目后,“我的回收器”视图未更新。此recyclerView位于片段内部。我试过各种方法,但都不管用。 片段类中的适配器声明 回收服务适配器: } 调试项目时,我可以看到该项实际上正在从ArrayList中删除。但不在循环视图中更新。 删除后,如果滚动回收站视图,则从回收站视图中删除已删除的项。但不是没有滚动。