Android知识点集合(毕业设计)

来源:互联网 发布:机构版交易软件 编辑:程序博客网 时间:2024/06/08 13:13
此文是我做毕业设计过程中遇到的问题整理而来,我会在毕设做完后放出所有源代码。
毕设题目为基于Android的果园信息采集系统
毕设所有资料已经放到http://orchardsystem.codeplex.com/

1.在改变ListPreference的值后,如何把ListPreference的值更新到它的Summary中

public boolean onPreferenceChange(Preference preference, Object newValue) {

String key = preference.getKey();
Log.v(TAG, key + " preference changed");
if (key.equals(connectionServerIpKey)) {
editTextPreferenceServerIP.setSummary(editTextPreferenceServerIP
.getEditText().getText());
} else if (key.equals(connectionServerPortKey)) {
editTextPreferenceServerPort
.setSummary(editTextPreferenceServerPort.getEditText()
.getText());
} else if (key.equals(connectionTypeKey)) {
String value = (String) newValue;//获取最近的值
int index = listPreferenceConnectType.findIndexOfValue(value);//获取该值对应的显示文字在Entry中的索引
CharSequence[] entries = listPreferenceConnectType.getEntries();
listPreferenceConnectType.setSummary(entries[index]);//设置Summary

} else {
return false;
}
return true;
}

2.PreferenceActivity中的 SharedPreferences如何在另外一个Activity中访问

在PreferenceActivity中

public static String PRFS_NAME="PreferenceSettings";

以下为onCreate()函数中

getPreferenceManager().setSharedPreferencesName(PRFS_NAME);
addPreferencesFromResource(R.xml.preferences);

在要调用的Activity中使用

SharedPreferences preferences = this.getSharedPreferences(SettingActivity.PRFS_NAME,

MODE_WORLD_READABLE);

Boolean flag = preferences.getBoolean(
getResources().getString(R.string.preferences_exit_confirm),
true);
当然还有其他的办法,比如有
spc = this.getSharedPreferences("com.android.PreferenceActivity.Usage_preferences.xml", MODE_WORLD_READABLE ); 
请Google该行代码可看到完整的版本,由于信息不全,我尝试了几种类似的,都行不通,不知道原文作者有试过否?

3.在打开欢迎界面后,跳转到主页面后退时,直接退出。
首先在欢迎界面启动主页面activity后,调用finish()函数即可,然后重写主页面的onKeyDown函数

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
exitDialog();//按下返回键相应的操作
}
return false;
}


4.Application使用时需在AndroidManifest.xml文件中配置
跟Activity、Service等等一样,需要配置的,在<Application>节点添加android:name="cn.ciee.f4.orchard.OrchardSystemApplication",这个错误居然困扰了我一天之久。

5.xml按下alt+/后不自动提示可选项
可能是因为我之前打开xml文件是以其他形式打开的,右击xml文件,open with选择android common xml editor即可。

6.C#中设置ListBox第一项为红色
要点:设置listbox的DrawMode属性为DrawMode.OwnerDrawFixed;然后再添加DrawItem委托即可

private ListBox ListBox1 = new ListBox();
private void InitializeListBox()
{
ListBox1.Items.AddRange(new Object[]
{ "Red Item", "Orange Item", "Purple Item" });
ListBox1.Location = new System.Drawing.Point(81, 69);
ListBox1.Size = new System.Drawing.Size(120, 95);
ListBox1.DrawMode = DrawMode.OwnerDrawFixed;//1
ListBox1.DrawItem += new DrawItemEventHandler(ListBox1_DrawItem);//2
Controls.Add(ListBox1);
}


//3
private void ListBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
// 为listbox的每一项绘制背景
e.DrawBackground();
// 设置默认颜色为黑色
Brush myBrush = Brushes.Black;

if(e.Index<0) return;//索引小于0则退出
// 设置每一项的颜色
switch (e.Index)
{
case 0://设置第一项为红色
myBrush = Brushes.Red;
break;
}

// 绘制listbox中的每一项
e.Graphics.DrawString(ListBox1.Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
// 绘制被选中项选中边框
e.DrawFocusRectangle();
}
程序运行如图
Android知识点集合 - WorldsList - 走在云海之巅
 


6.Java客户端与C#服务端通过Socket通信
Java端使用BufferedReader和PrintWriter流,C#端(TcpClient)使用StreamReader和StreamWriter,使用其他的流会出现很多意外情况,同时Java端每条发送的消息后面均要加上"\r\n",在读取C#发送过来的字符时,需去掉第一个字符,那是系统自动加上去的。
http://dotbootstrap.x2q.net/java-and-c-client-server-socket-programming/

7.android调用其他人项目中已经写好的so文件
首先,把so文件拷贝到android项目的libs\armeabi。
然后,编写Java文件调用so文件中的函数。System.loadLibrary("**");进行引用,然后编写相应的native函数。
此处必须使用生成so文件时,你所引用的第三方so文件所创建时的包名是什么,你在你调用的项目包名也必须相同。
我最开始自己使用时用了自定义的一个包,运行之后程序崩溃了,回来通过查阅资料,发现包名必须为生成so文件时的包明。
CSDN中我的回答

8.如何把十六进制形式的string转为int,比如“aa”->170
Interger提供了转为十六进制形式的方法,但没有转换回去的方法。
可通过自己编写函数实现,也可调用系统函数。
 (int) Long.parseLong(hex, 16);
http://stackoverflow.com/questions/12005424/java-converting-int-to-hex-and-back-again
自己编写方法暂时不提供,这个简便,暂时先用这个。
提供一个思路,类似使用加法器实现乘法。
原创粉丝点击