Java 如何:添加到收藏夹并查看收藏夹列表
我正在开发一个Android语言词典应用程序。我正在考虑一个“收藏夹”按钮,它分两个阶段工作:Java 如何:添加到收藏夹并查看收藏夹列表,java,android,eclipse,Java,Android,Eclipse,我正在开发一个Android语言词典应用程序。我正在考虑一个“收藏夹”按钮,它分两个阶段工作: 短按一下就会将当前浏览的单词添加到收藏夹列表中 长时间点击将允许用户查看收藏夹列表(添加的单词) 我想知道这是否可能,如果可能的话,你能解释一下怎么做吗 注:到目前为止,我只成功地将收藏夹图像按钮添加到应用程序中,当短按时,它会显示:“所选单词添加到收藏夹” 非常感谢您。假设,公共类FavViewActivity扩展了ListActivity,您只需以与添加OnClickListener相同的方式添加
非常感谢您。假设,
公共类FavViewActivity扩展了ListActivity
,您只需以与添加OnClickListener相同的方式添加OnLongClickListener:
btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
btnAddFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Add code here to save the favourite, e.g. in the db.
}
});
btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// Open the favourite Activity, which in turn will fetch the saved favourites, to show them.
Intent intent = new Intent(getApplicationContext(), FavViewActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
return false;
}
});
在数据库中,保留一个收藏夹表,列出标记为收藏夹的单词的id:s
对于创建一个新的活动,比如FavViewActivity,有很多指导
- 这是一个
- 是StackOverflow上的一个
- 是文档
package viettien.kadict;
import java.util.ArrayList;
import java.util.Arrays;
import viettien.kadict.R;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageButton;
import android.widget.Toast;
public class ContentView extends Activity {
static final private String CONTENT_TAG = "[Kadict - Content]";
static final private int SHOW_HISTORY_CODE = 0;
static final private int SHOW_FAVOURITE_CODE = 1;
static final private int MENU_BACK = Menu.FIRST;
static final private int MENU_FOWARD = Menu.FIRST+1;
static final private int MENU_LIST = Menu.FIRST+2;
static final private int MENU_HISTORY = Menu.FIRST+3;
private static final String MIMETYPE = "text/html";
private static final String ENCODING = "UTF-8";
private WebView wvContent = null;
private ImageButton btnGoBack = null;
private ImageButton btnGoForward = null;
private ImageButton btnShowHistory = null;
private ImageButton btnAddFavourite = null;
private String mCurrentWord;
private String mSelectedDB;
//private String mSelectedDBName;
private String mContentStyle;
private int mCurrentWordId;
private int mCurrentHistoryIndex = -1;
Menu menu = null;
private ArrayList<String> mWordHistory = null;
private SharedPreferences prefs;
private ProgressDialog pd = null;
// create Menu for Program
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
Log.i(CONTENT_TAG, "menu drawed!!");
// Group ID
int groupId = 0;
// The order position of the item
int menuItemOrder = Menu.NONE;
this.menu=menu;
// Added extra items to make sure there's more than six to
// force the extended menu to appear.
menu.add(groupId, MENU_BACK, menuItemOrder, R.string.menuGoBack);
menu.add(groupId, MENU_FOWARD, menuItemOrder, R.string.menuGoForward);
menu.add(groupId, MENU_LIST, menuItemOrder, R.string.menuList);
menu.add(groupId, MENU_HISTORY, menuItemOrder, R.string.menuHistory);
return true;
}
// process event select Menu
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
// Find which menu item has been selected
switch (item.getItemId()) {
case (MENU_BACK):
{
goBack();
break;
}
case (MENU_FOWARD):
{
goForward();
break;
}
case (MENU_LIST):
{
//menuDictionaryManager();
menuList();
break;
}
case (MENU_HISTORY):
{
break;
}
}
return true;
}
public void menuList()
{
/*
* TODO
* - save history list
*/
Intent i = new Intent();
i.putExtra("word", mCurrentWord);
setResult(RESULT_OK,i);
finish();
}
public void goBack()
{
Log.i(CONTENT_TAG,"go back");
String content = getHistoryContent("back");
showContent(content);
}
public void goForward()
{
Log.i(CONTENT_TAG,"go foward");
String content = getHistoryContent("back");
showContent(content);
}
@Override
public void onPause()
{
super.onPause();
saveHistoryToPreferences();
}
public void saveHistoryToPreferences()
{
if (prefs.getBoolean("saveHistory", true) && mWordHistory != null && mWordHistory.size() >= 1)
{
StringBuilder sbHistory = new StringBuilder();
for (String item : mWordHistory)
{
sbHistory.append(item);
sbHistory.append(",");
}
String strHistory = sbHistory.substring(0, sbHistory.length()-1);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("history", strHistory);
editor.commit();
//Log.i(CONTENT_TAG,"history = " + strHistory);
Log.i(CONTENT_TAG,"History saved!");
}
}
public void loadHistoryFromPreferences()
{
if (prefs.getBoolean("saveHistory", true))
{
String strHistory = prefs.getString("history", "");
Log.i(CONTENT_TAG, "History loaded");
if (strHistory != null && !strHistory.equals(""))
{
mWordHistory = new ArrayList<String>(Arrays.asList(strHistory.split(",")));
}
else
{
if (mWordHistory == null)
{
mWordHistory = new ArrayList<String>();
}
else
{
mWordHistory.clear();
}
}
}
else
{
if (mWordHistory == null)
{
mWordHistory = new ArrayList<String>();
}
else
{
mWordHistory.clear();
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.content);
//Log.i(CONTENT_TAG,".................onCreate.................");
Intent i = this.getIntent();
int wordId = i.getIntExtra("id", -1);
mCurrentWord = i.getStringExtra("word");
mSelectedDB = i.getStringExtra("db");
mContentStyle = i.getStringExtra("style");
//Log.i(CONTENT_TAG,"Style from intent = " + mContentStyle);
//Log.d(CONTENT_TAG,"current word = " + mCurrentWord);
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
loadHistoryFromPreferences();
wvContent = (WebView) findViewById(R.id.wvContent);
initWebview();
String content = getContentById(wordId);
showContent(content);
btnShowHistory = (ImageButton) findViewById(R.id.btnShowHistory);
btnShowHistory.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i(CONTENT_TAG, "Start showing history..");
/* Intent i = new Intent(v.getContext(), HistoryView.class);
HistoryList hl = new HistoryList(mWordHistory);
i.putExtra("history", hl);*/
startActivityForResult(new Intent(v.getContext(),HistoryView.class), SHOW_HISTORY_CODE);
//showHistory();
}
});
btnGoBack = (ImageButton) findViewById(R.id.btnGoBack);
btnGoBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d(CONTENT_TAG, "Start going back");
{
String content = getHistoryContent("back");
if (content == null) // end Activity now
{
menuList();
}
else // go back to previous word
{
showContent(content);
}
menuList();
}
}});
btnGoForward = (ImageButton) findViewById(R.id.btnGoForward);
btnGoForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d(CONTENT_TAG, "Start going forward");
goForward();
}
});
btnAddFavourite = (ImageButton) findViewById(R.id.btnAddFavourite);
btnAddFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast toast = Toast.makeText(ContentView.this, R.string.messageWordAddedToFarvourite, Toast.LENGTH_SHORT);
toast.show();
}
});
btnAddFavourite.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
return false;
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case SHOW_HISTORY_CODE:
Log.i(CONTENT_TAG,"resultCode = " + resultCode);
if (resultCode == RESULT_OK) // cleared
{
if (data == null)
{
//loadHistoryFromPreferences();
mWordHistory.clear();
Log.i(CONTENT_TAG,"History cleared");
}
else
{
int id = data.getIntExtra("wordId", 0);
String dict = data.getStringExtra("dict");
Log.i(CONTENT_TAG,"id = " + id + " | dict = " + dict);
if (id > 0 && dict != null)
{
mSelectedDB = dict;
String content = getContentById(id);
//initWebview();
showContent(content);
}
}
}
break;
case SHOW_FAVOURITE_CODE:
break;
}
}
/* @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_BACK) {
// When the user center presses, let them pick a contact.
Log.d(CONTENT_TAG,"Backkey pressed !!!");
if (mWordHistory != null && mWordHistory.size() > 1 && mCurrentHistoryIndex != 0)
{
String content = getHistoryContent("back");
if (content == null) // end Activity now
{
menuList();
}
else // go back to previous word
{
showContent(content);
}
}
else
{
menuList();
}
return true;
}
return false;
}*/
public void initWebview()
{
setContentView(R.layout.content);
wvContent = (WebView) findViewById(R.id.wvContent);
wvContent.setBackgroundColor(Color.argb(250, 250, 250, 250));
wvContent.setWebViewClient(new WebViewClient()
{
public void onPageFinished(WebView view, String url)
{
if (pd != null)
{
pd.dismiss();
pd = null;
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
Log.i(CONTENT_TAG,"WebView link clicked; url = " + url);
try
{
String arrUrlPart[] = url.split("://");
if (arrUrlPart[0].equals("entry"))
{
String content = getContentByWord(arrUrlPart[1]);
showContent(content);
}
else if (arrUrlPart[0].equals("http"))
{
try {
/*Intent i = new Intent();
ComponentName comp = new ComponentName(
"com.google.android.browser",
"com.google.android.browser.BrowserActivity");
i.setComponent(comp);
i.setAction("android.intent.action.VIEW");
i.addCategory("android.intent.category.BROWSABLE");
ContentURI uri = new ContentURI(url);
i.setData(uri);
startSubActivity(i, 2);*/
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
} catch (Exception ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return true;
}
});
}
public String getHistoryContent(String type)
{
String currentTerm = mSelectedDB + ":" + mCurrentWordId + ":" + mCurrentWord;
Log.i(CONTENT_TAG,"currentTerm = " +currentTerm);
if (mWordHistory == null || mWordHistory.isEmpty())
{
return null;
}
int pos = mWordHistory.indexOf(currentTerm);
Log.i(CONTENT_TAG,"pos = " + pos);
if (pos <= 0)
{
pos = mWordHistory.size();
}
String item = null;
String searchTerm;
if (type.equals("back"))
{
try
{
for (int i = pos-1; i >= 0 ; i--)
{
searchTerm = mWordHistory.get(i);
searchTerm = searchTerm.substring(0,searchTerm.indexOf("::"));
Log.i(CONTENT_TAG,"item = " + mWordHistory.get(i) + " - searchTerm = " + searchTerm);
if (searchTerm.equals(mSelectedDB))
{
item = mWordHistory.get(i);
mCurrentHistoryIndex = i;
break;
}
}
}
catch (Exception ex)
{
Log.i(CONTENT_TAG,"Error in finding history entry");
}
}
else
{
try
{
for (int i = pos; i < mWordHistory.size() ; i++)
{
searchTerm = mWordHistory.get(i);
searchTerm = searchTerm.substring(0,searchTerm.indexOf("::"));
Log.i(CONTENT_TAG,"item = " + mWordHistory.get(i) + " - searchTerm = " + searchTerm);
if (searchTerm.equals(mSelectedDB))
{
item = mWordHistory.get(i);
mCurrentHistoryIndex = i;
break;
}
}
}
catch (Exception ex)
{
Log.i(CONTENT_TAG,"Error in finding history entry");
}
}
if (item != null) // found previous item
{
Log.i(CONTENT_TAG,"item index = " + mCurrentHistoryIndex);
String arrPart[] = item.split(":");
Uri uri = Uri.parse("content://viettien.kadict.KadictProvider/dict/" + arrPart[0] + "/contentId/" + arrPart[1]);
Log.i(CONTENT_TAG,"History uri = " + uri.toString());
Cursor result = managedQuery(uri,null,null,null,null);
String content;
if (result != null)
{
result.moveToFirst();
content = Utility.decodeContent(result.getString(result.getColumnIndex("content")));
content = formatContent(content);
mSelectedDB = arrPart[0];
mCurrentWordId = Integer.parseInt(arrPart[1]);
mCurrentWord = arrPart[2];
return content;
}
else
{
return null;
}
}
else
{
return null;
}
}
public String getContentById(int id)
{
Uri uri = Uri.parse("content://viettien.kadict.KadictProvider/dict/" + mSelectedDB + "/contentId/" + id);
Cursor result = managedQuery(uri,null,null,null,null);
String content;
if (result != null)
{
result.moveToFirst();
content = Utility.decodeContent(result.getString(result.getColumnIndex("content")));
mCurrentWordId = result.getInt(result.getColumnIndex("id"));
mCurrentWord = result.getString(result.getColumnIndex("word"));
}
else // Word not found
{
content = getString(R.string.errorWordNotFound);
mCurrentWordId = -1;
mCurrentWord = "";
}
content = formatContent(content);
return content;
}
public String getContentByWord(String word)
{
Uri uri = Uri.parse("content://viettien.kadict.KadictProvider/dict/" + mSelectedDB + "/contentWord/" + word);
Log.i(CONTENT_TAG,"uri = " + uri.toString());
Cursor result = managedQuery(uri,null,null,null,null);
String content;
if (result != null && result.getCount() > 0)
{
result.moveToFirst();
content = Utility.decodeContent(result.getString(result.getColumnIndex("content")));
mCurrentWordId = result.getInt(result.getColumnIndex("id"));
mCurrentWord = result.getString(result.getColumnIndex("word"));
}
else
{
content = getString(R.string.errorWordNotFound) + word;
mCurrentWordId = -1;
mCurrentWord = "";
}
content = formatContent(content);
return content;
}
public void saveHistory()
{
String item = mSelectedDB + "::" + mCurrentWordId + "::" + mCurrentWord;
if (mWordHistory.indexOf(item) == -1 && mCurrentWordId != -1) // new item
{
mWordHistory.add(item);
mCurrentHistoryIndex = mWordHistory.size();
if (menu != null)
{
menu.findItem(MENU_FOWARD).setEnabled(false);
if (mWordHistory.size() == 1)
{
menu.findItem(MENU_BACK).setEnabled(false);
}
}
//Log.i(CONTENT_TAG,"new item added " + item);
}
}
public String formatContent(String content)
{
StringBuilder htmlData = new StringBuilder();
htmlData.append("<html><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>\n");
if (mContentStyle != null && !mContentStyle.equals(""))
{
htmlData.append("<head><style type=\"text/css\">"+mContentStyle+"</style></head>\n");
}
htmlData.append("<body><font face=\"Arial\">");
htmlData.append(content);
htmlData.append("</font></body></html>");
return htmlData.toString();
}
public void showContent(String content)
{
if (content != null)
{
pd = ProgressDialog.show(this, "Working...", "Loading content", true,false);
saveHistory();
wvContent.loadDataWithBaseURL (null, content, MIMETYPE, ENCODING,"about:blank");
}
}
}
package viettien.kadict;
导入java.util.ArrayList;
导入java.util.array;
进口viettien.kadict.R;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.database.Cursor;
导入android.graphics.Color;
导入android.net.Uri;
导入android.os.Bundle;
导入android.preference.PreferenceManager;
导入android.util.Log;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.Window;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
导入android.widget.ImageButton;
导入android.widget.Toast;
公共类ContentView扩展了活动{
静态最终私有字符串CONTENT_TAG=“[Kadict-CONTENT]”;
静态最终私有整数显示\历史\代码=0;
静态最终私有整数显示\u收藏夹\u代码=1;
静态最终私有int MENU\u BACK=MENU.FIRST;
静态最终私有int MENU\u FOWARD=MENU.FIRST+1;
静态最终私有int MENU_LIST=MENU.FIRST+2;
静态最终私有int MENU_历史=MENU.FIRST+3;
私有静态最终字符串MIMETYPE=“text/html”;
私有静态最终字符串编码=“UTF-8”;
私有WebView wvContent=null;
私有ImageButton btnGoBack=null;
私有ImageButton btnGoForward=null;
private ImageButton btnShowHistory=null;
私有ImageButton btnAddFavourite=null;
私有字符串mCurrentWord;
私有字符串mSelectedDB;
//私有字符串mSelectedDBName;
私有字符串mContentStyle;
私有int-mCurrentWordId;
private int mCurrentHistoryIndex=-1;
菜单=空;
private ArrayList mWordHistory=null;
私人共享参考优先权;
private ProgressDialog pd=null;
//为程序创建菜单
@凌驾
公共布尔onCreateOptions菜单(菜单){
super.onCreateOptions菜单(菜单);
Log.i(内容标签,“菜单抽屉!!”);
//组ID
int-groupId=0;
//项目的订单位置
int menuItemOrder=Menu.NONE;
这个.菜单=菜单;
//添加了额外的项目,以确保有六个以上的
//强制显示扩展菜单。
添加(groupId、menu\u BACK、menuItemOrder、R.string.menuGoBack);
menu.add(groupId、menu\FOWARD、menuItemOrder、R.string.menugoforder);
添加(groupId、menu\u列表、menuItemOrder、R.string.menuList);
添加(groupId、menu\u历史记录、menuItemOrder、R.string.menuHistory);
返回true;
}
//进程事件选择菜单
公共布尔值onOptionsItemSelected(菜单项项){
super.onOptionsItemSelected(项目);
//查找已选择的菜单项
开关(item.getItemId()){
案例(菜单返回):
{
goBack();
打破
}
案例(菜单前):
{
goForward();
打破
}
案例(菜单列表):
{
//菜单项管理器();
menuList();
打破
}
案例(菜单\历史记录):
{
打破
}
}
返回true;
}
公共无效菜单列表()
{
/*
*待办事项
*-保存历史记录列表
*/
意图i=新意图();
i、 putExtra(“单词”,mCurrentWord);
setResult(结果_OK,i);
完成();
}
公开作废goBack()
{
Log.i(内容标签“返回”);
字符串内容=getHistoryContent(“返回”);
showContent(content);
}
公开发行
{
Log.i(内容标签“前进”);
字符串内容=getHistoryContent(“返回”);
showContent(content);
}
@凌驾
公共无效暂停()
{
super.onPause();
saveHistoryToPreferences();
}
public void saveHistoryToPreferences()
{
if(prefs.getBoolean(“saveHistory”,true)&&mWordHistory!=null&&mWordHistory.size()>=1)
{
StringBuilder sbHistory=新建StringBuilder();
用于(字符串项:mWordHistory)
{
sbHistory.append(项目);
sbHistory.追加(“,”);
}
字符串strHistory=sbHistory.substring(0,sbHistory.length()-1);
SharedReferences.Editor=prefs.edit();
编辑:putString(“历史”,故事);
commit();
//Log.i(CONTENT_标签,“history=“+strHistory”);
Log.i(CONTENT_标签,“History saved!”);
}
}
public void loadHistoryFromPreferences()
{
if(prefs.getBoolean(“saveHistory”,true))
{
String strHistory=prefs.getString(“history”,即“”);
Log.i(内容标签,“加载历史”);
if(strHistory!=null&!strHistory.equals(“”)
{
mWordHistory=newarraylist(Arrays.asList(strHistory.split(“,”));
}
其他的
{
if(mWordHistor)