安卓收获地址管理代码

时间: 2023-08-06 17:24:31 浏览: 34
以下是一个简单的安卓收货地址管理的代码示例: 1. Address类,用于存储地址信息 ```java public class Address { private int id; private String name; private String phone; private String address; private String zipCode; private boolean isDefault; // 构造函数和Getter/Setter方法省略 } ``` 2. AddressAdapter类,用于展示地址列表 ```java public class AddressAdapter extends RecyclerView.Adapter<AddressAdapter.ViewHolder> { private List<Address> mAddresses; private OnItemClickListener mOnItemClickListener; public AddressAdapter(List<Address> addresses) { mAddresses = addresses; } public void setOnItemClickListener(OnItemClickListener listener) { mOnItemClickListener = listener; } public interface OnItemClickListener { void onItemClick(View view, int position); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_address, parent, false); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(final ViewHolder holder, int position) { Address address = mAddresses.get(position); holder.name.setText(address.getName()); holder.phone.setText(address.getPhone()); holder.address.setText(address.getAddress()); holder.zipCode.setText(address.getZipCode()); holder.defaultAddress.setChecked(address.isDefault()); holder.defaultAddress.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getAdapterPosition(); Address address = mAddresses.get(pos); address.setDefault(holder.defaultAddress.isChecked()); notifyDataSetChanged(); } }); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getAdapterPosition(); if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(holder.itemView, pos); } } }); } @Override public int getItemCount() { return mAddresses.size(); } static class ViewHolder extends RecyclerView.ViewHolder { TextView name; TextView phone; TextView address; TextView zipCode; CheckBox defaultAddress; public ViewHolder(View view) { super(view); name = view.findViewById(R.id.tv_name); phone = view.findViewById(R.id.tv_phone); address = view.findViewById(R.id.tv_address); zipCode = view.findViewById(R.id.tv_zip_code); defaultAddress = view.findViewById(R.id.cb_default_address); } } } ``` 3. AddressManager类,用于管理地址信息 ```java public class AddressManager { private static AddressManager sInstance; private List<Address> mAddresses; private SharedPreferences mSharedPreferences; private AddressManager(Context context) { mSharedPreferences = context.getSharedPreferences("address", Context.MODE_PRIVATE); String addressesStr = mSharedPreferences.getString("addresses", ""); if (!TextUtils.isEmpty(addressesStr)) { mAddresses = new Gson().fromJson(addressesStr, new TypeToken<List<Address>>(){}.getType()); } if (mAddresses == null) { mAddresses = new ArrayList<>(); } } public static AddressManager getInstance(Context context) { if (sInstance == null) { sInstance = new AddressManager(context); } return sInstance; } public List<Address> getAddresses() { return mAddresses; } public void addAddress(Address address) { mAddresses.add(address); saveAddresses(); } public void deleteAddress(Address address) { mAddresses.remove(address); saveAddresses(); } public void updateAddress(Address address) { for (Address addr : mAddresses) { if (addr.getId() == address.getId()) { addr.setName(address.getName()); addr.setPhone(address.getPhone()); addr.setAddress(address.getAddress()); addr.setZipCode(address.getZipCode()); addr.setDefault(address.isDefault()); break; } } saveAddresses(); } public void setDefaultAddress(Address address) { for (Address addr : mAddresses) { if (addr.getId() == address.getId()) { addr.setDefault(true); } else { addr.setDefault(false); } } saveAddresses(); } private void saveAddresses() { String addressesStr = new Gson().toJson(mAddresses); mSharedPreferences.edit().putString("addresses", addressesStr).apply(); } } ``` 4. AddressActivity类,用于展示地址列表和编辑地址信息 ```java public class AddressActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private AddressAdapter mAdapter; private List<Address> mAddresses; private int mSelectedPosition = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_address); mAddresses = AddressManager.getInstance(this).getAddresses(); mRecyclerView = findViewById(R.id.recycler_view); LinearLayoutManager layoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(layoutManager); mAdapter = new AddressAdapter(mAddresses); mAdapter.setOnItemClickListener(new AddressAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { mSelectedPosition = position; Address address = mAddresses.get(position); Intent intent = new Intent(AddressActivity.this, EditAddressActivity.class); intent.putExtra("address", address); startActivityForResult(intent, 1); } }); mRecyclerView.setAdapter(mAdapter); Button addButton = findViewById(R.id.btn_add); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(AddressActivity.this, EditAddressActivity.class); startActivityForResult(intent, 1); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { Address address = (Address) data.getSerializableExtra("address"); if (requestCode == 1) { AddressManager.getInstance(this).addAddress(address); } else if (requestCode == 2) { AddressManager.getInstance(this).updateAddress(address); } mAdapter.notifyDataSetChanged(); } } } ``` 5. EditAddressActivity类,用于编辑地址信息 ```java public class EditAddressActivity extends AppCompatActivity { private EditText mNameEditText; private EditText mPhoneEditText; private EditText mAddressEditText; private EditText mZipCodeEditText; private CheckBox mDefaultCheckBox; private Address mAddress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_address); mNameEditText = findViewById(R.id.et_name); mPhoneEditText = findViewById(R.id.et_phone); mAddressEditText = findViewById(R.id.et_address); mZipCodeEditText = findViewById(R.id.et_zip_code); mDefaultCheckBox = findViewById(R.id.cb_default_address); mAddress = (Address) getIntent().getSerializableExtra("address"); if (mAddress != null) { mNameEditText.setText(mAddress.getName()); mPhoneEditText.setText(mAddress.getPhone()); mAddressEditText.setText(mAddress.getAddress()); mZipCodeEditText.setText(mAddress.getZipCode()); mDefaultCheckBox.setChecked(mAddress.isDefault()); } Button saveButton = findViewById(R.id.btn_save); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mAddress == null) { mAddress = new Address(); } mAddress.setName(mNameEditText.getText().toString()); mAddress.setPhone(mPhoneEditText.getText().toString()); mAddress.setAddress(mAddressEditText.getText().toString()); mAddress.setZipCode(mZipCodeEditText.getText().toString()); mAddress.setDefault(mDefaultCheckBox.isChecked()); Intent intent = new Intent(); intent.putExtra("address", mAddress); setResult(RESULT_OK, intent); finish(); } }); } } ``` 以上是一个简单的安卓收货地址管理的代码示例,仅供参考。根据实际需求,还需要进行适当的修改和完善。

相关推荐

最新推荐

recommend-type

Android 通过代码安装 APK的方法详解

主要介绍了Android 通过代码安装 APK的方法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习火锅工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Android开心消消乐代码实例详解

主要介绍了Android开心消消乐代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

android布局管理器代码

对于android常用的布局管理器的代码练习,主要以xml文件为主,也有部分的Activity的操作!
recommend-type

解决Android Studio 代码自动提示突然失效的问题

主要介绍了解决Android Studio 代码自动提示突然失效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

Android开发获取手机Mac地址适配所有Android版本

最近由于项目需要MAC地址的记录,搞了一个通用的适配类,目前经过测试可以适配Android所有版本,我测试过的设备系统Android 4 5 6 7 7+都可以获取到,废话不多说直接上代码,简洁: 该类分为三类:Android6.0以下、...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解答下列问题:S—>S;T|T;T—>a 构造任意项目集规范族,构造LR(0)分析表,并分析a;a

对于这个文法,我们可以构造以下项目集规范族: I0: S -> .S S -> .T T -> .a I1: S -> S. [$ T -> T. [$ I2: S -> T. I3: S -> S.;S S -> S.;T T -> T.;a 其中,点(.)表示已经被扫描过的符号,;$表示输入串的结束符号。 根据项目集规范族,我们可以构造出LR(0)分析表: 状态 | a | $ ---- | - | - I0 | s3| I1 | |acc I2 | | 其中s3表示移进到状态3,acc表示接受。在分析字符串a;a时,我们可以按照以下步骤进行
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。