tk打包成exe
Tkinter是Python中的一个GUI工具包,它提供了一些基础的GUI组件,如按钮、文本框、标签等等。在Python中,我们可以使用Tkinter来开发各种GUI应用程序。但是,当我们开发完一个应用程序后,如果想要将它分享给其他人使用,我们需要将它打包成一个可执行文件。在Python中,我们可以...
2023-10-13 围观 : 20次
Android通讯录是一款用于管理联系人信息的应用程序,主要功能包括新增、编辑、删除联系人,以及搜索联系人等。本文将介绍Android通讯录的开发原理及完整代码。
1.开发原理
Android通讯录的开发主要涉及以下几个方面:
1)联系人数据的存储:Android通讯录的联系人数据存储在系统提供的Content Provider中,开发者可以通过Content Provider提供的API进行数据的操作。
2)联系人数据的展示:开发者可以通过ListView或RecyclerView等控件展示联系人数据,并通过Adapter将数据与控件进行绑定。
3)联系人数据的操作:开发者可以通过对ListView或RecyclerView的Item进行点击事件监听,实现对联系人数据的操作,包括新增、编辑、删除等。
2.完整代码
下面是Android通讯录的完整代码,包括联系人数据的展示和操作:
1)布局文件activity_main.xml
```
android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" />
```
2)联系人数据的展示MainActivity.java
```
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private Button mAddBtn;
private List
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.listView);
mAddBtn = findViewById(R.id.addBtn);
mContactList = new ArrayList<>();
//获取联系人数据
getContacts();
//设置ListView的Adapter
mListView.setAdapter(new ContactAdapter(this, mContactList));
//新增联系人
mAddBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
startActivity(intent);
}
});
}
//获取联系人数据
private void getContacts() {
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Contact contact = new Contact();
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contact.setId(id);
contact.setName(name);
mContactList.add(contact);
}
cursor.close();
}
}
}
```
3)联系人数据的操作ContactAdapter.java
```
public class ContactAdapter extends BaseAdapter {
private Context mContext;
private List
public ContactAdapter(Context context, List
mContext = context;
mContactList = contactList;
}
@Override
public int getCount() {
return mContactList.size();
}
@Override
public Object getItem(int position) {
return mContactList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_contact, parent, false);
holder = new ViewHolder();
holder.nameTv = convertView.findViewById(R.id.nameTv);
holder.editBtn = convertView.findViewById(R.id.editBtn);
holder.deleteBtn = convertView.findViewById(R.id.deleteBtn);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Contact contact = mContactList.get(position);
holder.nameTv.setText(contact.getName());
//编辑联系人
holder.editBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + contact.getId()));
mContext.startActivity(intent);
}
});
//删除联系人
holder.deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, contact.getId());
mContext.getContentResolver().delete(uri, null, null);
mContactList.remove(position);
notifyDataSetChanged();
}
});
return convertView;
}
private static class ViewHolder {
TextView nameTv;
Button editBtn;
Button deleteBtn;
}
}
```
4)联系人数据的实体类Contact.java
```
public class Contact {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
以上就是Android通讯录的完整代码,通过这个例子,我们可以了解到Android通讯录的开发原理及相关操作。
Tkinter是Python中的一个GUI工具包,它提供了一些基础的GUI组件,如按钮、文本框、标签等等。在Python中,我们可以使用Tkinter来开发各种GUI应用程序。但是,当我们开发完一个应用程序后,如果想要将它分享给其他人使用,我们需要将它打包成一个可执行文件。在Python中,我们可以...
随着移动互联网的快速发展,越来越多的企业和个人开始寻求定制化的移动应用来满足其特定的需求。因此,app定制开发服务已经成为了一个蓬勃发展的领域。但是,由于市场上存在着众多的app开发厂商,如何选择一家优秀的app定制开发服务公司是很重要的。下面,本文将从app定制开发服务的原理和详细介绍两个方面来探...
APK多开安装包是一种可以让用户在一个设备上安装多个同一应用的工具。这种工具在一些特定场景下非常有用,比如用户需要在一个设备上同时登录多个账号,或者用户需要测试同一应用的不同版本等。APK多开安装包的制作原理其实很简单,就是通过修改APK包的包名和应用数据存储目录,来实现在同一设备上安装多个同一应用...
苹果的ipa软件是指在苹果手机或平板电脑上运行的应用程序。它由苹果公司的xcode软件开发工具包制作。在制作ipa软件时,需要使用xcode编辑器进行编程和开发,然后使用xcode工具将代码转换为ipa文件。首先,开发者需要下载并安装xcode工具包,然后创建一个新的项目。在项目中,开发者可以添加代...
在移动应用开发中,HTML5技术已经成为一种非常流行的开发方式。使用HTML5开发的应用可以在多个平台上运行,且开发成本较低。但是,使用HTML5技术开发的应用在iOS平台上无法上架成为App Store中的应用,这是因为苹果公司对于应用的审核有着非常严格的标准,而HTML5应用无法满足这些标准。一...