工作也好几年了,但是一直没有在博客上发表过任何文章。导致学过的东西好长时间不用都忘得差不多了。现在要开始养成好的编程习惯了。呵呵!
最近android很火,公司正好没有什么事情。翻书看看。随便来写几句,以备日后查看。言归正传!
上面这幅图完整的描述了android的生命周期,下面对各个方法做个介绍。
1. 当Activity第一次启动的时候调用首先调用oncreate()方法。我们可以在这个方法中设置布局文件,添加监听器等操作。
2.onStart() 是Activity能被我们看到的时候调用。
3.onResume() 是Activity能够获得用户焦点的时候调用。
4.onPause() 当启动另一个Activity 首先调用第一个Activity的onPause。 (onPause方法有可能是用户来电等操作时调用,我们可能保留当前Activity的数据)
5.onStop(); 是Activity用户不可见的时候调用
6.onRestart();如我们点击回退按钮时,如果此Activity没有被Destroy是调用Restart方法,而不是调用oncreate()方法。
7.onDestroy() 是Activity销毁时调用。如调用 finish()和系统资源不够用时此Activity用户有不可见调用。
1,创建keystore
D:\>keytool -genkey -v -keystore d:\Jiubianli-rel-key.keystore -alias Jiubianli-alias -keyalg RSA -validity 10000
输入keystore密码:
再次输入新密码:jiubianli
您的名字与姓氏是什么?
[Unknown]: meng
您的组织单位名称是什么?
[Unknown]: chao
您的组织名称是什么?
[Unknown]: jiubianli
您所在的城市或区域名称是什么?
[Unknown]: zhengzhou
您所在的州或省份名称是什么?
[Unknown]: henan
该单位的两字母国家代码是什么
[Unknown]: CN
CN=meng, OU=chao, O=jiubianli, L=zhengzhou, ST=henan, C=CN 正确吗?
[否]: y
正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 10,000 天):
CN=meng, OU=chao, O=jiubianli, L=zhengzhou, ST=henan, C=CN
输入<Jiuianli-alias>的主密码
(如果和 keystore 密码相同,按回车):
再次输入新密码:
[正在存储 d:\Jiuianli-rel-key.keystore]
2,生成认证指纹
D:\>keytool -list -alias Jiubianli-alias -keystore Jiubianli-rel-key.keystore
输入keystore密码:
Jiubianli-alias, 2011-2-24, PrivateKeyEntry,
认证指纹 (MD5): 74:FF:21:85:03:6D:4A:04:B6:1C:75:67:19:65:7F:31
3,然后输入以下网址获取map key
http://www.google.com/glm/mmap/a/api?fp=74:FF:21:85:03:6D:4A:04:B6:1C:75:67:19:65:7F:31
登录后,可以获得map key:
感谢您注册 Android 地图 API 密钥!
您的密钥是:
0W8jPPMaincp8UfM64dMAyTaxGejItKS7NdWPRA
此密钥适用于所有使用以下指纹所对应证书进行验证的应用程序:
74:FF:21:85:03:6D:4A:04:B6:1C:75:67:19:65:7F:31
下面是一个 xml 格式的示例,帮助您了解地图功能:
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0W8jPPMaincp8UfM64dMAyTaxGejItKS7NdWPRA"
/>
4, 从eclipse中导出unsigned的apk
在eclipse中,右键点击项目名,选择“Android Tools”,再选择“Export Unsigned Application Package”,选择一个保存路径,确定。
5,Sign
运行下面的命令:
jarsigner -verbose -keystore Jiubianli-rel-key.keystore MobileBar.apk Jiubianli-alias
运行时需要输入keystore的密码。
运行完后,可以运行命令jarsigner -verify MobileBar.apk 验证sign是否正确。
6 zipalign
zipalign命令在android sdk的tools文件夹下面。
运行命令:
zipalign -v 4 MobileBar.apk DealBox_v1.apk
最终生成的apk文件就是DealBox_v1.apk
不用说了,上图先:
import java.util.ArrayList;
import com.ql.adapter.DeletableAdapter;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
public class Test_4_Activity extends Activity {
private DeletableAdapter adapter;
private ArrayList<String> text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test4);
ListView list_view = (ListView) findViewById(R.id.list_view);
text = new ArrayList<String>();
text.add("111");
text.add("222");
text.add("333");
text.add("444");
// 初始化数据结束
adapter = new DeletableAdapter(this, text);
list_view.setAdapter(adapter);
// list_view.setSelector(R.drawable.list_select_color);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
text.add("10000");
adapter.notifyDataSetChanged();
}
});
}
}
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.ql.activity.R;
public class DeletableAdapter extends BaseAdapter{
private Context context;
private ArrayList<String> text;
public DeletableAdapter(Context context,ArrayList<String> text){
this.context = context;
this.text=text;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return text.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return text.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int index=position;
View view=convertView;
if(view==null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=inflater.inflate(R.layout.row_simple_list_item_2, null);
}
final TextView textView=(TextView)view.findViewById(R.id.simple_item_1);
textView.setText(text.get(position));
final ImageView imageView=(ImageView)view.findViewById(R.id.simple_item_2);
imageView.setBackgroundResource(android.R.drawable.ic_delete);
imageView.setTag(position);
imageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
text.remove(index);
notifyDataSetChanged();
Toast.makeText(context, textView.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ImageView android:id="@+id/simple_item_2"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:focusable="false"
/>
<TextView android:id="@+id/simple_item_1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>
这里要实现点击ListView里面的一个控件而不是选中一行。
最好重写Adapter,而不要使用其自带的SimpleAdapter,否则该子控件的事件就不那么好处理了!
至少这个
public void onClick(View v) {
55. // TODO Auto-generated method stub
56. text.remove(index);
57. notifyDataSetChanged();
58. Toast.makeText(context, textView.getText().toString(), Toast.LENGTH_SHORT).show();
59. }
就会报错 !
Only the original thread that created a view hierarchy can touch its views.
至少这个
public void onClick(View v) {
55. // TODO Auto-generated method stub
56. text.remove(index);
57. notifyDataSetChanged();
58. Toast.makeText(context, textView.getText().toString(), Toast.LENGTH_SHORT).show();
59. }
就会报错 !
Only the original thread that created a view hierarchy can touch its views.
一定哪里搞错了,我从项目里抠出来的代码,这个问题应该好解决,你自己试着解决下。