很多书上只讲到了从数据库中获得联系人,并显示在一个ListView中,却没有讲到单击联系人需要拨号,经过本人努力,实现了这个功能。
主要是需要知道并获得CursorWrapper 这个类,它是指针的封装类,可以用于获得当前指针指向的数据。代码公布如下:
import android.app.Activity;
import android.app.PendingIntent;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.telephony.PhoneNumberUtils;
import android.telephony.gsm.SmsManager;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class App extends Activity {
private static final String TAG="App";
ListView listView;
ListAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
LinearLayout linearLayout=new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setBackgroundColor(Color.BLACK);
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
listView=new ListView(this);
listView.setBackgroundColor(Color.BLACK);
linearLayout.addView(listView,param);
this.setContentView(linearLayout);
//从数据库获取联系人姓名和电话号码
Cursor cur=this.getContentResolver().query(People.CONTENT_URI,null, null,null,null);
adapter=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cur,new String[]{People.NAME,People.NUMBER},new int[]{android.R.id.text1,android.R.id.text2});
this.startManagingCursor(cur);
listView.setAdapter(adapter);
//listView.setEmptyView(findViewById(R.id.empty));
listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
public void onItemSelected(AdapterView> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
//openToast("滚动到:"+arg0.getSelectedItemId());
//短信发送
// PendingIntent pi = PendingIntent.getActivity(App.this,0,new Intent(App.this,App.class),0);
// SmsManager sms = SmsManager.getDefault();
// sms.sendTextMessage("5554", null, "message", pi, null);
}
public void onNothingSelected(AdapterView> arg0) {
// TODO Auto-generated method stub
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
// String[] names=((CursorWrapper)listView.getItemAtPosition(position)).getColumnNames();
//从指针的封装类中获得选中项的电话号码并拨号
CursorWrapper wrapper=(CursorWrapper)listView.getItemAtPosition(position);
int columnIndex=wrapper.getColumnIndex(People.NUMBER);
if(!wrapper.isNull(columnIndex)){
String number=wrapper.getString(columnIndex);
Log.d(TAG,"number="+number);
// //判断电话号码的有效性
if(PhoneNumberUtils.isGlobalPhoneNumber(number)){
Intent intent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel://"+ number));
startActivity(intent);
}
}
}
});
}
private void openToast(String str){
Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
}
}
package="com.wt.app"
android:versionCode="1"
android:versionName="1.0">
android:label="@string/app_name">
ANDROID初级历险之spinner篇
listview和spinner都算是adapter容器,在显示时都需要一个adapter去装载需要显示的数据。上一篇已经介绍了怎样用adapter去做数据绑定,这节我们去看看下试图部分的模板。
回忆下,在listview中的ArrayAdapter部分,我们用过simple_list_item_1做视图模板。这个视图模板实际上就是一个textview组件而已。你到对应sdk的layout目录下可以找到答案。同时你也可以发现还有很多可用的模板:simple_list_item_2,simple_list_item_checked,simple_list_item_multiple_choice,simple_list_item_single_choice…这些模板理论上都可以替换原来的simple_list_item_1。具体看进去:simple_list_item_2就是2个textview构成的。simple_list_item_multiple_choice和simple_list_item_single_choice实际上就是个CheckedTextView,checkMark属性是个reference类型,引用单选或多选按钮图片就成了上面2个视图的区别。
同理,spinner也有2种模板。simple_spinner_item,这个是textview的。simple_spinner_dropdown_item,这个是带单选按钮的。
所以熟悉了系统自带的默认模板,有时候我们会发现大部分情况下,我们并不需要自定义视图模板了…
稍微仔细观察下listview和spinner的不同,你会发现listview是全屏的,而spinner的是模态的圆角非全屏的。显然spinner的表现要好得多,那它和listview有什么不同呢?
spinner有一个属性android:prompt,提示这样描述的,The prompt to display when the spinner’s dialog is shown。哦,原来弹出的是个dialog。那弹出的dialog中这么显示列表呢?源代码进去找,发现个AlertDialog有setItems方法或者setAdapter方法,可以让我们轻松的显示一个集合列表。在仔细看进去,你还会发现几个类似的方法:setMultiChoiceItems,setSingleChoiceItems …
基本上到这里,常用的listview和spinner之间的区别就这些了。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net