【发布时间】:2017-12-28 05:46:04
【问题描述】:
我有一个问题,我有一个按钮,它本质上是一个“收藏夹”按钮,它保存来自 webview sesson 的 URL 并将其添加到另一个名为收藏夹的类中的列表视图中。由于找不到更好的方法,它通过共享偏好来做到这一点。我遇到的问题是,当我尝试保存另一个 URL 时,它只会覆盖当前存在的 URL,而不会添加另一行。我的带有按钮的 webview 代码是:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_share) {
shareURL();
Toast.makeText(this, getString(R.string.share),
Toast.LENGTH_SHORT).show();
}
if (id == R.id.action_favorite) {
changeIcon();
Snackbar.make(findViewById(android.R.id.content), "Saved for later", Snackbar.LENGTH_LONG).show();
String url = getIntent().getDataString();
SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("URL", url );
edit.apply();
}
return super.onOptionsItemSelected(item);
}
// 我的“收藏夹”类的代码如下:
//LIST OF ARRAY STRINGS WHICH WILL SERVE AS LIST ITEMS
ArrayList<String> listItems = new ArrayList<String>();
//DEFINING A STRING ADAPTER WHICH WILL HANDLE THE DATA OF THE LISTVIEW
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorites_list);
ListView listView = (ListView) findViewById(R.id.favoritesList);
adapter = new ArrayAdapter<String>(this,
R.layout.custom_lv,
listItems);
listView.setAdapter(adapter);
SharedPreferences bb = getSharedPreferences("my_prefs", 0);
String m = bb.getString("URL", "");
listItems.add(m);
adapter.notifyDataSetChanged();
}
任何帮助将不胜感激!
--- 编辑 --
使用 FnR 的代码,它仍然只是在收藏夹列表视图中添加最新的“已保存”url,更新的代码如下:
--收藏代码--
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorites_list);
ListView listView = (ListView) findViewById(R.id.favoritesList);
adapter = new ArrayAdapter<String>(this,
R.layout.custom_lv,
listItems);
listView.setAdapter(adapter);
getListFromSharedPreferences();
}
private List<String> getListFromSharedPreferences() {
SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE);
Set<String> set = prefs.getStringSet("URL", null);
List<String> urlList = new ArrayList<>();
if (set != null) {
urlList = new ArrayList<>(set);
listItems.add(String.valueOf(set));
adapter.notifyDataSetChanged();
}
Log.e("size",urlList.size()+"");
return urlList;
}
-- 网页视图代码--
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_share) {
shareURL();
Toast.makeText(this, getString(R.string.share),
Toast.LENGTH_SHORT).show();
}
if (id == R.id.action_favorite) {
changeIcon();
Snackbar.make(findViewById(android.R.id.content), "Saved for later", Snackbar.LENGTH_LONG).show();
String url = getIntent().getDataString();
putSharedPreferences(url);
}
return super.onOptionsItemSelected(item);
}
private void putSharedPreferences(String url) {
SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE);
SharedPreferences.Editor edit = prefs.edit();
Set<String> set = prefs.getStringSet("URL", null);
if (set != null) {
set.add(url);
edit.putStringSet("URL", set);
edit.apply();
}
}
【问题讨论】:
-
你能把你的活动课填满吗?
-
我的活动课满了?
-
是的。所有活动
标签: android listview sharedpreferences android-arrayadapter