我有一個活動,其中包含一個列表(類似於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;
}
}
- 1. 從另一個活動更新活動
- 2. 將值從一個活動傳遞到另一個活動
- 3. 將數值從一個活動發送到另一個活動活動
- 4. Android更新活動textview更改後從另一個活動
- 5. 從另一個活動更新視圖
- 6. Xamarin Android - 從另一個活動更新一個活動的UI控件
- 7. LiveData不會從一個活動更新數據到另一個活動 - 的Android
- 8. 將數據從一個活動傳遞到另一個活動
- 9. 將佈局從一個活動傳遞到另一個活動
- 10. 如何將一個活動放在另一個活動上
- 11. 如何將一個活動重定向到另一個活動
- 12. 將Spinner/EditText中的值從一個活動傳遞到另一個活動
- 13. 從一個活動到另一個活動的動態列表
- 14. 另一種方法從一個活動傳遞值到另一個活動
- 15. 從另一個活動調用另一個活動
- 16. Android:將int值從一個活動傳遞到另一個活動
- 17. Java綁定錯誤從一個活動更改爲另一個活動
- 18. 繼續從一個活動滾動到另一個活動
- 19. 將第三個活動的值傳遞給第一個活動
- 20. 將數據從一個活動動態添加到另一個活動
- 21. 如何將光標從一個活動移動到另一個活動
- 22. 如何使另一個活動作爲主要活動(啓動)
- 23. 從一個活動暫停調用另一個活動
- 24. 有一個主要活動,調用另一個活動
- 25. 從一個活動(數據庫)轉移到另一個活動
- 26. 從一個活動轉移到另一個活動
- 27. 啓動活動超時,因爲活動啓動另一個活動
- 28. 如何調用標籤活動中,從另一個活動一個活動
- 29. 將getCallingActivity的活動與另一個活動進行比較
- 30. 如何將多個變量從一個活動傳遞到另一個活動
您將獲得只有當數據更新到數據庫精確值。如果您想在離線狀態下執行此操作,則必須將數據保存在任何本地資源中。 – RAAAAM
我不想維護數據庫。其實我正在創建的應用程序是一種社交應用程序,我無法下載整個圖並將其保存到數據庫。是否有任何黑客或方法可以讓我實現這一目標? –