将一个活动的值更新为另一个活动
我有一个活动,其中包含一个列表(类似于fb或instagram馈送),并且我有喜欢该项目的按钮,并且它还显示喜欢的数量。现在假设我点击图像,它会在单独的活动中打开图像的分解视图,该活动也具有按钮。如果我在爆炸视图活动中对图像进行了类似操作,我想在前一个(feed)屏幕中的图像上反映相同的内容。我知道一种方法是从第一个活动的onResume()
方法的后端刷新源。但我不想刷新整个页面,仅仅为了反映UI和一些变量的变化而丢失可能的滚动并破坏用户体验。有没有任何标准的方式来做这些事情? Facebook或其他类似的应用如何实现这一目标?如果有任何图书馆可以提供帮助,请让我知道。谢谢。将一个活动的值更新为另一个活动
只需刷新从listview适配器提供的下载数据。
然后在适配器上调用notifyDataSetChanged()。
这样你就可以在本地更新你的数据并刷新你的列表。
不可能只是更新listview的一行,那是你在找什么?
我不明白你写的是什么。你能澄清一下吗? –
Theres与redownloading数据和刷新列表以显示更改之间的区别。只要指出第二件事,并询问您是否正在寻找替代方案来更新一行而不是整个列表视图。 – Nanoc
我想更新一行,而不是整个列表。假设我重新下载了数据,我在特定索引处替换了列表对象,然后调用notifyDataSetChanged(),但同样,重新下载数据需要几秒钟,并且更改不会是即时的。 –
也许你可以使用startActivityForResult()
和onActivityResult()
。
通过这种方式,您可以设置一个代码,这意味着用户在需要首先刷新数据的第二个活动中创建了一些内容。
您可以使用LocalBroadcastManager发送您的上一个活动将要侦听的广播。
Intent intent = new Intent(LIST_UPDATED);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
我的决定onActivityResult()+ notifyDataSetChanges()我的10分钟并不完美,但代码:
public class MainActivity extends Activity {
private AdapterListView adapterListView;
private int adapterUpdateItemPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<SomeObject> list = new ArrayList<>();
for (int i = 0 ; i < 20 ; i++)
list.add(new SomeObject());
adapterListView = new AdapterListView((LayoutInflater) getApplicationContext()
.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE), list);
listView.setAdapter(adapterListView);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapterUpdateItemPosition = position;
startActivityForResult(new Intent(MainActivity.this, SecondActivity.class), SecondActivity.REQUEST_UPDATE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
if (requestCode == SecondActivity.REQUEST_UPDATE){
adapterListView.updateListView(adapterUpdateItemPosition, data.getBooleanExtra(SecondActivity.ADAPTER_POSITION, false));
}
}
}
}
public class SecondActivity extends Activity {
public static final String ADAPTER_POSITION = "ADAPTER_POSITION";
public static final int REQUEST_UPDATE = 2321;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.item_grid);
findViewById(R.id.tv_item_grid).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_OK, new Intent().putExtra(ADAPTER_POSITION, true));
finish();
}
});
}
}
public class AdapterListView extends BaseAdapter {
private LayoutInflater lInflater;
private ArrayList<SomeObject> objects;
public AdapterListView(LayoutInflater lInflater, ArrayList<SomeObject> objects) {
this.lInflater = lInflater;
this.objects = objects;
}
@Override
public int getCount() {
return objects.size();
}
@Override
public SomeObject getItem(int position) {
return objects.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.item_grid, parent, false);
}
SomeObject p = getItem(position);
if(p.isLike()) {
((TextView) view.findViewById(R.id.tv_item_grid)).setText("LIKE");
} else ((TextView) view.findViewById(R.id.tv_item_grid)).setText("NOT LIKE");
return view;
}
public void updateListView(int position, boolean isLike){
getItem(position).setLike(isLike);
notifyDataSetChanged();
}
}
public class SomeObject{
private boolean like = false;
public boolean isLike() {
return like;
}
public void setLike(boolean like) {
this.like = like;
}
}
您将获得只有当数据更新到数据库精确值。如果您想在离线状态下执行此操作,则必须将数据保存在任何本地资源中。 – RAAAAM
我不想维护数据库。其实我正在创建的应用程序是一种社交应用程序,我无法下载整个图并将其保存到数据库。是否有任何黑客或方法可以让我实现这一目标? –