2. 進入主頁面後自動從File文件中讀取聯繫人數據,每個item只顯示,姓名和電話。如果,你在添加聯繫人時,填寫了備註,那麼item的姓名顯示成你保存的備註。否則顯示姓名。
3. 添加聯繫人功能,佈局最上方有一個添加聯繫人按鈕,下面是ListView, 當點擊添加聯繫人按鈕時,跳轉至新頁面,輸入姓名,電話,備註(電話和 姓名不能爲空,電話只能爲數字)。確定後保存File文件,並且直接回退到 主頁面
4. 當點擊每個item時,跳轉至詳細頁面,顯示當前聯繫人的名字、電話、 備註。
package com.example.cxy.androidcontact; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class AddActivity extends AppCompatActivity implements View.OnClickListener { private EditText ed_Name, ed_Phone, ed_Remark; private Button btn_Save; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); initView(); } private void initView() { ed_Name = (EditText) findViewById(R.id.editName); ed_Phone = (EditText) findViewById(R.id.editPhone); ed_Remark = (EditText) findViewById(R.id.editRemark); btn_Save = (Button) findViewById(R.id.btn_save); btn_Save.setOnClickListener(this); } @Override public void onClick(View v) { //判斷文件是否存在,如果存在則存入數據,且爲追加屬性 try { File file = new File("/mnt/sdcard/contact/contact.txt"); if (!file.exists()) { file = new File("/mnt/sdcard/contact"); file.mkdir(); file = new File("/mnt/sdcard/contact/contact.txt"); file.createNewFile(); } //把你的文件保存置爲追加。true則爲追加 FileOutputStream out = new FileOutputStream(file, true); //如果文本內容不爲空,則存儲 if (!(TextUtils.isEmpty(ed_Name.getText().toString()) || TextUtils.isEmpty(ed_Phone.getText().toString()))) { String person = ed_Name.getText().toString() + "," + ed_Phone.getText().toString() + "," + ed_Remark.getText().toString() + "#"; out.write(person.getBytes()); out.close(); Toast.makeText(AddActivity.this, "存儲成功", Toast.LENGTH_SHORT).show(); //頁面銷燬,返回主類 finish(); } else { Toast.makeText(AddActivity.this, "存儲失敗", Toast.LENGTH_SHORT).show(); } } catch (IOException e) { e.printStackTrace(); } } }
package com.example.cxy.androidcontact.adapter; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.cxy.androidcontact.R; import java.util.List; import java.util.Map; /** * Created by admin on 2017/3/5. */ public class MyAdapter extends BaseAdapter { private Context mContext; private List<Map<String, String>> mList; //有參構造方法 public MyAdapter(Context context, List<Map<String, String>> list) { mContext = context; mList = list; } //獲取列表總長度 @Override public int getCount() { //返回一個全局的列表的總長度 return mList.size(); } //獲取當前整個item(一整行)返回一個當前視圖中的所有數據 @Override public Object getItem(int position) { //返回下標 return mList.get(position); } //獲取當前item的ID @Override public long getItemId(int position) { //返回下標 return position; } //獲取視圖 當前視圖下標 指當前視圖 上級父容器 @Override public View getView(int position, View convertView, ViewGroup parent) { //創建一個ViewHodler類對象 ViewHodler viewHodler; //判斷當前converView是否爲空,如果爲空 if (convertView == null) { //則加載新的item行佈局 convertView = LayoutInflater.from(mContext).inflate(R.layout.activity_item, null); //實例化viewHodler viewHodler = new ViewHodler(); //通過視圖尋找控件ID viewHodler.tvName = (TextView) convertView.findViewById(R.id.tv_Name); viewHodler.tvPhone = (TextView) convertView.findViewById(R.id.tv_Phone); //設置convertView緩存標籤,傳入控件 convertView.setTag(viewHodler); } else { //從convertView視圖中獲取緩存的標籤 viewHodler = (ViewHodler) convertView.getTag(); } //將對應下標的值賦給對應位置 viewHodler.tvName.setText(mList.get(position).get("name")); //如果聯繫人備註爲空則顯示電話,如果不爲空則在電話位置顯示備註 if (TextUtils.isEmpty(mList.get(position).get("remark"))) { viewHodler.tvPhone.setText(mList.get(position).get("phone")); } else { viewHodler.tvPhone.setText(mList.get(position).get("remark")); } //返回當前converView視圖給用戶看 return convertView; } //自定義內部類ViewHolder class ViewHodler { private TextView tvName, tvPhone; } }
package com.example.cxy.androidcontact; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import com.example.cxy.androidcontact.adapter.MyAdapter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity implements View.OnClickListener, AdapterView.OnItemClickListener { private Button btn_add; private ListView mListView; private List<Map<String, String>> mList; private Map<String, String> mMap; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件和List集合的方法 initview(); } //從文件中讀取數據的方法 private void writeFile() { try { //實例化File對象,參數爲路徑名 File file = new File("/mnt/sdcard/contact/contact.txt"); //判斷文件是否存在,存在則讀取,不存在的不讀取 if (file.exists()) { //將File文件輸出 FileInputStream input = new FileInputStream(file); //定義byte[]字節數組,使用available方法讀取文件中存儲的信息長度 byte[] bytes = new byte[input.available()]; //調用read方法將bytes數組中的數據讀取 input.read(bytes); //關閉輸出流 input.close(); //把文件中讀取到的內容全部轉化爲字符串 String content = new String(bytes); //先以#號分割爲每一個人 String[] person = content.split("#"); //使用循環把每一個人的三個屬性分開 for (int i = 0; i < person.length; i++) { //使用split分割將person數組中的信息用逗號分隔開 String[] split = person[i].split(","); mMap = new HashMap<>(); //使用循環輸出信息 for (int x = 0; x < split.length; x++) { if (x == 0) { mMap.put("name", split[x]); } else if (x == 1) { mMap.put("phone", split[x]); } else if (x == 2) { mMap.put("remark", split[x]); } } //存放集合 mList.add(mMap); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void initview() { mList = new ArrayList<>(); btn_add = (Button) findViewById(R.id.btn_add); mListView = (ListView) findViewById(R.id.listView); btn_add.setOnClickListener(this); mListView.setOnItemClickListener(this); } @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(this, AddActivity.class); startActivity(intent); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(); intent.setClass(this, DetialActivity.class); //將聯繫人信息傳到DetialActivity類中 intent.putExtra("name", mList.get(position).get("name")); intent.putExtra("phone", mList.get(position).get("phone")); intent.putExtra("remark", mList.get(position).get("remark")); startActivity(intent); } //此方法,每次進入先清理集合,然後再次獲取數據, //並且如果適配器沒有實例化,則實例化,否則則刷新 @Override protected void onResume() { super.onResume(); mList.clear(); writeFile(); if (adapter != null) { adapter.notifyDataSetChanged(); } else { adapter = new MyAdapter(this, mList); mListView.setAdapter(adapter); } } }
package com.example.cxy.androidcontact; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class DetialActivity extends AppCompatActivity { private TextView tv_Name, tv_Phone, tv_Remark; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detial); initView(); } private void initView() { tv_Name = (TextView) findViewById(R.id.tvName); tv_Phone = (TextView) findViewById(R.id.tvPhone); tv_Remark = (TextView) findViewById(R.id.tvRemark); Intent intent = getIntent(); String name = intent.getStringExtra("name"); String phone = intent.getStringExtra("phone"); String remark = intent.getStringExtra("remark"); tv_Name.setText(name); tv_Phone.setText(phone); tv_Remark.setText(remark); } }