`
longgangbai
  • 浏览: 7340327 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个简单的中英文翻译词典学习(类似灵格斯)三

阅读更多

      在查询之后的详细信息中,我会注意到在UI开发中关于回车键的实现功能以及在listView中展示所有信息的实现,一个查看单个单词信息怎么实现呢?

 

实现回车键代码功能在Android中的实现

 

 

  /**
    	    * 编辑框添加事件
    	    */
    	   wordEdit.setOnKeyListener(new View.OnKeyListener() {
   			
   			@Override
   			public boolean onKey(View v, int keyCode, KeyEvent event) {
   				if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER){
   					// user input enter
   					queryButton.performClick();
   					return true;
   				}
   				return false;
   			}
   		});

 

在Android中细心童鞋可以发现,Android中可以支持JSON格式的:

  /**
     * 获取查询项的信息
     * @param word
     * @param result
     * @return
     * @throws JSONException
     */
	private List<SearchItem> getAudioVoiceByJSON(String word, String result)
			throws JSONException {
		JSONObject jsonObject = new JSONObject(result);
		JSONArray jsonArray = jsonObject.getJSONArray("s");
		if (jsonArray!= null && jsonArray.length() >0){
			List<SearchItem> rt = new ArrayList<SearchItem>();
			for(int i=0;i<jsonArray.length(); i++){
				JSONObject row = jsonArray.getJSONObject(i);
				String rword = row.getString("g");
				String e = row.getString("e");
				rt.add(new SearchItem(rword, e));
			}
			if (cache.size() > 100){
				cache.remove(cache.keySet().iterator().next());
			}
			cache.put(word, rt);
			return rt;
		}
		return Collections.emptyList();
	}

 

实现关闭页面的代码如下:

 /**
   * 点击返回按钮的事件
   */
  backButton.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    finish();
   }
  });

 

 实现界面切换的代码如下:

/**
            *点击一个页面的记录跳转的方法
            */
           searchListView.setOnItemClickListener(new OnItemClickListener() {

   			@Override
   			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
   					long arg3) {
   				SearchItem item = searchItemAdapter.getItems().get(arg2);
   				if (item != null){
   					//设置跳转的信息  DictActivity 当前的页面 ,  DetailActivity 单词的详细情况
   					Intent intent = new Intent(DictActivity.this, DetailActivity.class);
   					//设置辅助的信息
   					intent.putExtra("word", item.getWord());
   					//设置激活的界面
   					startActivity(intent);
   				}
   			}
   		});

 

 

 

至于ListView在下一篇Blog中讲解。

(*^__^*) 嘻嘻……

 

 

 

 

源代码如下:

package com.easyway.android.xdict;

import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
/**
 * 字典首界面
 * @author longgangbai
 * @date 2010-5-28
 * @version 1.0
 * @since JDK6.0
 */
public class DictActivity extends Activity {
    /** Called when the activity is first created. */
    /* (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
	private ProgressDialog pdialog;
	
	private SearchItemAdapter searchItemAdapter;

	private static final int DIALOG_WORD_REQUIRED = 0;
	
	private  EditText wordEdit;
	private  Button queryButton;
	private  ListView searchListView;
	
	private static Map<String, List<SearchItem>> cache = new HashMap<String, List<SearchItem>>();

	/**
	 * 界面启动时使用弹出框
	 */
	@Override
	protected Dialog onCreateDialog(int id) {
		switch (id) {
		case DIALOG_WORD_REQUIRED:
			AlertDialog.Builder builder = new AlertDialog.Builder(
					DictActivity.this);
			builder.setMessage("请输入你想查询的单词!").setCancelable(false)
			.setPositiveButton("确定", new OnClickListener() {

						@Override
						public void onClick(DialogInterface dialog, int which) {
							dialog.cancel();
							//设置焦点
							wordEdit.setFocusable(true);
						}
					});
			try {
				return builder.create();
			} catch (Exception e) {
				Log.e(DictActivity.class.getName(), e.getMessage(), e);
			}
			break;
		default:
			return super.onCreateDialog(id);
		}
		return super.onCreateDialog(id);
	}
	/**
	 * 调用时启动线程
	 */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置视图
        setContentView(R.layout.main);
        //设置标题
        setTitle("XDict");
        //创建组件
        createComponent();
        
        //绑定事件
        bindListener();
    }
    /**
     * 创建组件
     */
    public void createComponent(){
    	  List<SearchItem> items = new ArrayList<SearchItem>();
          //创建自定义的ArrayAapter的适配器对象
          searchItemAdapter = new SearchItemAdapter(this, R.layout.row, items);
          //获取ListView对象
          searchListView = (ListView) findViewById(R.id.search_listview);
          //设置适配器对象
          searchListView.setAdapter(searchItemAdapter);

          queryButton = (Button) findViewById(R.id.query_button);
          wordEdit = (EditText) findViewById(R.id.word_edittext);
    }
    /**
     * 绑定事件
     */
    public void bindListener(){
    	   /**
    	    * 编辑框添加事件
    	    */
    	   wordEdit.setOnKeyListener(new View.OnKeyListener() {
   			
   			@Override
   			public boolean onKey(View v, int keyCode, KeyEvent event) {
   				if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER){
   					// user input enter
   					queryButton.performClick();
   					return true;
   				}
   				return false;
   			}
   		});
    	   /**
    	    * 查询按钮添加事件
    	    */
           queryButton.setOnClickListener(new View.OnClickListener() {
   			
   			@Override
   			public void onClick(View v) {
   				searchItemAdapter.getItems().clear();
   				searchItemAdapter.notifyDataSetChanged();
   				String word = wordEdit.getText().toString();
   				if (word == null || word.trim().length() == 0){
   					showDialog(DIALOG_WORD_REQUIRED);
   					return ;
   				}			
   				//添加进度条
   				pdialog = ProgressDialog.show(DictActivity.this, "请稍等...", "正在请求数据...", true);
   				//添加线程的
   				new Thread(){
   					@Override
   					public void run() {

   						final List<SearchItem> searchItems = getSearchItems(wordEdit.getText().toString());
   						searchItemAdapter.getItems().addAll(searchItems);
   						//采用UI线程更改界面信息
   						runOnUiThread(new Runnable() {
   							@Override
   							public void run() {
   								searchItemAdapter.notifyDataSetChanged();
   								View noresultTextview = findViewById(R.id.nosearchresult_textview);
   								if (searchItems.isEmpty()){
   									noresultTextview.setVisibility(View.VISIBLE);
   									queryButton.setFocusable(true);
   								}else{
   									noresultTextview.setVisibility(View.INVISIBLE);
   								}
   								//进度条消失
   								pdialog.dismiss();
   							}
   						});
   					}
   				}.start();
   			}
   		});
           /**
            *点击一个页面的记录跳转的方法
            */
           searchListView.setOnItemClickListener(new OnItemClickListener() {

   			@Override
   			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
   					long arg3) {
   				SearchItem item = searchItemAdapter.getItems().get(arg2);
   				if (item != null){
   					//设置跳转的信息  DictActivity 当前的页面 ,  DetailActivity 单词的详细情况
   					Intent intent = new Intent(DictActivity.this, DetailActivity.class);
   					//设置辅助的信息
   					intent.putExtra("word", item.getWord());
   					//设置激活的界面
   					startActivity(intent);
   				}
   			}
   		});
    }
    
    /**
     * 设置查询参数
     * @return
     */
    public  Map<String,String> getDicAppParamsMap(){
    	Map<String,String> paramsMap=new HashMap<String,String>();
		paramsMap.put("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.6) Gecko/20091215 Ubuntu/9.10 (karmic) Firefox/3.5.6");
		paramsMap.put("Referer", "http://dict.cn/");
		paramsMap.put("ISAJAX", "yes");
		paramsMap.put("Cookie", "dictid=u; __utma=7761447.596616007.1262230974.1262230974.1262321903.2; __utmz=7761447.1262230974.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); h=%2Ffuck%2Fmy%2F%B0%B2%C8%AB%BC%EC%B2%E9%2F%CE%D2%B5%C4%2F%CD%AC%D2%E5%B4%CA%2Fshitwork%2Ffuckhead%2F; __utmc=7761447; __utmb=7761447");
		paramsMap.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
		return  paramsMap;
    }
    
    
    /**
     * 查询相关建议的页面
     * @param word
     * @return
     */
    private List<SearchItem> getSearchItems(String word){
    	List<SearchItem> cacheData = cache.get(word);
    	if (cacheData != null){
    		return cacheData;
    	}
    	try{
			    String urlString = "http://dict.cn/ajax/suggestion.php?"+"q=" + URLEncoder.encode(word,"utf-8") + "&s=all";
		        Map<String,String> paramsMap=getDicAppParamsMap();
				String result=HTTPClient.executeByHttpURLConnection(urlString, paramsMap); 
				if (result!=null&&result.length()>0){
					 return getAudioVoiceByJSON(word, result);
				}
		} catch (Exception e) {
			Log.d(DictActivity.class.getName(), "Failed to get the search items", e);
		}
		return Collections.emptyList();
    }
    
    /**
     * 获取查询项的信息
     * @param word
     * @param result
     * @return
     * @throws JSONException
     */
	private List<SearchItem> getAudioVoiceByJSON(String word, String result)
			throws JSONException {
		JSONObject jsonObject = new JSONObject(result);
		JSONArray jsonArray = jsonObject.getJSONArray("s");
		if (jsonArray!= null && jsonArray.length() >0){
			List<SearchItem> rt = new ArrayList<SearchItem>();
			for(int i=0;i<jsonArray.length(); i++){
				JSONObject row = jsonArray.getJSONObject(i);
				String rword = row.getString("g");
				String e = row.getString("e");
				rt.add(new SearchItem(rword, e));
			}
			if (cache.size() > 100){
				cache.remove(cache.keySet().iterator().next());
			}
			cache.put(word, rt);
			return rt;
		}
		return Collections.emptyList();
	}
}

 

分享到:
评论

相关推荐

    灵格斯会计词典(2个)ld2格式&txt格式

    这种格式的词典文件可以直接在灵格斯辞典软件中使用,提供全功能的查词、发音、例句演示等功能,适合需要专业级翻译和学习的用户。使用ld2格式的优点在于可以充分利用灵格斯的高级功能,如词汇记忆、智能提示等,...

    灵格斯+牛津词典

    灵格斯+牛津词典 lingoes 和 牛津词典 开发工具

    利用jieba完成对年报可读性分析所需词典(2个灵格斯词典+会计科目+会计术语+连词词典)

    本主题主要关注如何利用jieba与特定词典,包括两个灵格斯词典、会计科目词典、会计术语词典以及连词词典,来提升年报分析的准确性与效率。 首先,jieba是Python中广泛使用的中文分词库,它提供了高效的分词、词性...

    灵格斯安装程序+牛津高阶英汉双解词典

    灵格斯词霸 x64 - 简体中文版(.exe) + 牛津高阶英汉双解词典

    经典词典 翻译软件打包(有道,灵格斯..)

    经典词典 翻译软件打包(有道,灵格斯..) 正在使用 很好的

    利用jieba完成对年报可读性分析所需5个词典(预处理后)(2个灵格斯词典、会计科目、会计术语、连词词典)

    这里提到的压缩包包含五个专门针对会计领域的词典,分别是预处理后的灵格斯词典、会计科目词典、会计术语词典以及连词词典。这些词典对于理解和解析年报中的专业词汇和表达至关重要。 首先,我们来看预处理后的灵...

    英语单词翻译_灵格斯词霸2.5.3 绿色便携版.rar

    综上所述,灵格斯词霸2.5.3绿色便携版不仅仅是一款翻译软件,它更是一个全方位的语言学习伴侣。它具备强大的词典资源,丰富多样的功能,以及极为方便的携带性,这些都是现代翻译软件中难得一见的特点。无论是商务...

    灵格斯计算机实用词典

    很好的实用的词典可以进行各种计算语言的翻译描述的行了吧 老大

    简单的中英文词典(java编写)

    《简单的中英文词典》是一款基于Java编程语言开发的应用,主要目标是帮助初学者在学习Java的过程中更好地理解和应用基础知识。这个项目将编程与实际应用相结合,使得理论学习更具实践意义。 1. Java基础:Java是一...

    中英文词典数据库 mdb数据库文件 36672个词汇

    这是网络上搜集整理的一个中英文翻译词典的数据库。一共有36672条中英文词语对照表。可以用来做中英文翻译软件。有这方面需要的。可以下载。

    Pyqt5实现英文学习词典

    运用Python语言编写程序制作英文学习词典,词典有4个基本功能:添加、查询、删除和退出。程序读取源文件路径下的txt格式词典文件,若没有就创建一个。词典文件存储方式为“英文单词 中文单词”,每行仅有一对中英...

    灵格斯词霸(Lingoes) v2.9.2 官方安装版.zip

    Lingoes 灵格斯词霸是一款简明易用的翻译与词典软件,支持全球超过60多个国家语言的互查互译、支持多语种屏幕取词、索引提示和语音朗读功能,是新一代的词典翻译专家. Lingoes 灵格斯词霸 2.9.0 是一个历时一年全新...

    lingoes_2.9.2_x64_cn灵格斯词霸 2.9.2 x64 (简体中文版)64位.rar

    灵格斯词霸是一款强大的翻译和词典软件,尤其适合学习和研究外语的用户使用。该版本为2.9.2 x64,是专为64位操作系统设计的简体中文版。以下是对这款软件及其特点的详细介绍: 1. **软件介绍**:灵格斯词霸提供实时...

    中英文切换,自定义翻译词典

    本项目涉及的主题是“中英文切换”与“自定义翻译词典”,这是一个典型的本地化(Localization)和文本处理任务,对于创建多语言支持的应用程序至关重要。下面将详细解释这些知识点。 首先,**中英文切换**是为用户...

    lingoes_2.9.2_cn灵格斯词霸 - 简体中文版.rar

    灵格斯词霸是一款强大的翻译和词典软件,专为学习者和专业人士设计。这款2.9.2简体中文版提供了丰富的语言资源和便捷的翻译功能,旨在帮助用户快速理解并掌握各种词汇。在这款软件中,我们可以找到以下几个关键知识...

    基于Java的简单中英文词典查询基于Java的简单中英文词典查询.zip

    它提供了一个简单的中英文词典查询应用程序的基础框架。它展示了如何使用Java编程语言和Swing库来创建图形用户界面,并利用MySQL数据库来存储和查询数据。具体来说,这段代码的开发意义包括:学习如何创建基本的图形...

    知网hownet中英文情感词典

    4. **机器翻译**:在翻译过程中,情感词典能帮助保留原文的情感色彩,提高翻译的准确性和自然度。 5. **文本生成**:在生成有情感色彩的文本时,如故事或评论,情感词典可以指导选择恰当的词汇来表达特定情感。 6....

    中英文词典.zip

    【标题】"中英文词典.zip"所包含的项目是一个实现了中英文互译功能的代码库,这在学习、教学和日常使用中非常实用。它可能是由一系列编程语言(如Python、JavaScript或Java)编写的,旨在帮助用户查找并理解词汇的...

    SAP 中英文词典 英汉对照

    SAP中英文词典,SAP术语英汉对照表 中英文对照参考 ERP英文学习参考

    灵格斯俄汉语言包

    灵格斯俄汉语言包,方便俄语和汉语之间词典互相查找。对俄语专业的人提供便利。

Global site tag (gtag.js) - Google Analytics