从J2EE转向Android的第十一天-----DatePickerDialog和ListActivity

本文分享了使用Android实现日期选择对话框和联系人管理的经验,包括自定义日期显示和通过ContentResolver读取联系人信息。重点讨论了如何在应用中灵活运用这些功能,并强调了在开发过程中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没写了,最近忙死了。晚上敲点儿代码也不想来这儿贴出来。最郁闷的是今天搞了一天Flex界面,结果要换一种方式显示,大半天的敲得代码又得重新写。我就一装满水的杯具啊。

 

DatePickerDialog:

本想将时间Dialog上显示的English改为中文的,没找到方法,估计得改它的源码。以后用到再说吧,哈哈。

package com.lhw.android.datePickerDialogTest;

import java.util.Calendar;
import java.util.Locale;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

public class MainActivity extends Activity implements OnDateSetListener,OnClickListener {
    private Button btn;
    private TextView tv;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn=(Button)this.findViewById(R.id.btn);
        btn.setOnClickListener(this);
        tv=(TextView)this.findViewById(R.id.tv);
    }
   
    public void onClick(View arg0) {
  Calendar c=Calendar.getInstance(Locale.CHINA);
  int year=c.get(Calendar.YEAR);
  int month=c.get(Calendar.MONTH);
  Log.e("MainActivity",String.valueOf(month));
  int day=c.get(Calendar.DAY_OF_MONTH);
  DatePickerDialog dialog=new DatePickerDialog(this,this,year,month,day);
  dialog.show();
 }
   
 public void onDateSet(DatePicker view, int year, int monthOfYear,
   int dayOfMonth) {
  //Calendar月份是从0开始的,所以要在月份前加一
  tv.setText(year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日");
 }

}

 

 

ListAdapter:

 早在文件管理例子中就用过这个东西,今天算是复习下吧

网上例子里的android.provider.Contacts.People类在2.1里面已经被标识为:

This class is deprecated. see ContactsContract.

 

package com.lhw.android.callcontack;

import android.app.ListActivity;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class MainActivity extends ListActivity {
 private String[] names;
 private int[] tos;
 private SimpleCursorAdapter adapter;
 private Intent callIntent;
 private long phoneId;
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
         //Cursor,该接口提供从数据库提取信息返回结果中随机读写访问
         //ContentResolver 提供应用程序访问Content模型
         //ContentResolver.query()抽取给定的URI,返回一个在结果之上的Cursor
         Cursor c=getContentResolver().query(Contacts.CONTENT_URI,null, null, null, null);
         //该方法允许Activity基于Activity的生命周期来为你处理管理给定的Cursor的生命周期
         startManagingCursor(c);
         //新建用户名数组People类用于列出联系人People.NAME得到联系人姓名
         names=new String[]{Contacts.DISPLAY_NAME};
         //创建一个TextView引用数组用来放置获取的People.NAME
         tos=new int[]{R.id.row_entry};
         //创建一个简单的适配器从一个cursor指针到TextView或是ImageView的map专栏适配器。
         //构造方法(Context,layout,Cursor,from,to),第一参数是设备上下文,第二个参数是布局文
         //件,第三个参数是指向联系人URI的Cursor指针,form代表来源的字符串(联系人名),to把联系人名放到
         //的地方(TextView)
         adapter=new SimpleCursorAdapter(this,R.layout.main,c,names,tos);
         this.setListAdapter(adapter);
        }catch(Exception e){
         Toast.makeText(this,"联系人读取错误",Toast.LENGTH_LONG).show();
         Log.e(this.getLocalClassName(),e.getMessage());
        }
    }
 
 @Override
 protected void onListItemClick(ListView lv,View v,int position,long id){
  //创建一个带有Call动作的Intent
  callIntent=new Intent(Intent.ACTION_CALL);
  //通过选中的Items位置来获取相应的联系人指针Cursor
  Cursor c=(Cursor)adapter.getItem(position);
  //获取相应联系人电话号码
  //getLong()返回请求数据的一个长整型
  //为给定的列,返回基于0的索引值
  //People.PRIMARY_PHONE_ID 获取主键电话号码
  phoneId=c.getLong(c.getColumnIndex(Contacts.LOOKUP_KEY));
  //为Intent设置操作的数据
  //ContentUris操作带有数据内容的Uri的实用方法、它们带有"Content"体制
  //withAppendedId()把给定的ID添加到path后面第一个参数是开始的,后面参数是添加的
  callIntent.setData(ContentUris.withAppendedId(Contacts.CONTENT_URI,phoneId));
  startActivity(callIntent);
 }
}   

 

最后需要在AndroidManifest.xml文件中声明相关权限请求,

<uses-permission android:name="android.permission.READ_CONTACTS"/>
 <uses-permission android:name="android.permission.CALL_PHONE"/>

 

 

以前模拟器不能输入中文,搞了半天原来是要切换下,点击英文就切换到中文了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值