2015年5月7日 星期四

ListView電話簿找聯絡人

main.xml//主頁
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_print" />

        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_add_contact" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_print_name" />
    </LinearLayout>

</LinearLayout>
listview_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <EditText
        android:id="@+id/search"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <requestFocus />
    </EditText>

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/search" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/textView"
        android:background="#ffacff89" />

</RelativeLayout>
listview_item.xml//清單裡載入的項目
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/txt_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#ff91c6ff" />

    <TextView
        android:id="@+id/txt_number"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txt_name" />

</RelativeLayout>
Main.java
package com.androidbegin.filterlistviewtutorial;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by win7 on 2015/3/31.
 */
public class Main extends Activity {
    private Button button;
    private TextView textView,txt_print_name,txt_add_contact;
    String name;
    String number;
    public void onCreate(Bundle savedInstance){
        super.onCreate(savedInstance);
        setContentView(R.layout.main);
        textView=(TextView)findViewById(R.id.txt_print);
        txt_add_contact=(TextView)findViewById(R.id.txt_add_contact);
        txt_print_name=(TextView)findViewById(R.id.txt_print_name);
        // Retrieve data from MainActivity on item click event
        Intent i = getIntent();
        // Get the results of rank
        name = i.getStringExtra("name");//檢索來自意圖擴展的數據
        // Get the results of country
        number = i.getStringExtra("number");//檢索來自意圖擴展的數據

        txt_add_contact.setText(name);
        txt_print_name.setText(number);

        button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent_select_contact = new Intent(Main.this,MainActivity.class);
                startActivity(intent_select_contact);

            }
        });
    }

}
MainActivity.java
package com.androidbegin.filterlistviewtutorial;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Locale;

public class MainActivity extends Activity {

    // Declare Variables
    ListView list;
    ListViewAdapter adapter;
    EditText editsearch;
    TextView textView;
    String[] name;//儲存連絡人名子
    String[] number;//儲存連絡人電話
    int c = 0;
    int totalpeople = 0;
    ArrayList arraylist = new ArrayList();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_main);
        textView = (TextView) findViewById(R.id.textView);
        /*取得聯絡人姓名和電話*/
        getPhoneBookData();

        String s = String.valueOf(totalpeople);
        textView.setText(s);
        list = (ListView) findViewById(R.id.listview);
        // Pass results to ListViewAdapter Class
        adapter = new ListViewAdapter(this, arraylist);
        // Binds the Adapter to the ListView
        list.setAdapter(adapter);
        // Locate the EditText in listview_main.xml
        editsearch = (EditText) findViewById(R.id.search);
        // Capture Text in EditText
        editsearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable arg0) {
                // TODO Auto-generated method stub
                String text = editsearch.getText().toString().toLowerCase(Locale.getDefault());
                adapter.filter(text);
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1,
                                          int arg2, int arg3) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
                // TODO Auto-generated method stub
            }
        });
    }

    public void getPhoneBookData() {

        Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        totalpeople = cursor.getCount();//聯絡人總人數
        name = new String[totalpeople];
        number = new String[totalpeople];

        while (cursor.moveToNext()) {
            name[c] = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            number[c] = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            c++;
            if (totalpeople == c) {
                for (int i = 0; i < name.length; i++) {
                    WorldPopulation wp = new WorldPopulation(name[i], number[i]);
                    // Binds all strings into an array
                    arraylist.add(wp);//把資料加入WorldPopulation創建的wp
                }
                break;
            }

        }

    }

}
ListViewAdapter.java
package com.androidbegin.filterlistviewtutorial;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class ListViewAdapter extends BaseAdapter {

    // Declare Variables
    Context mContext;
    LayoutInflater inflater;
    private List worldpopulationlist = null;
    private ArrayList arraylist;

    public ListViewAdapter(Context context, List worldpopulationlist) {
        mContext = context;
        this.worldpopulationlist = worldpopulationlist;
        inflater = LayoutInflater.from(mContext);
        this.arraylist = new ArrayList();
        this.arraylist.addAll(worldpopulationlist);
    }

    public class ViewHolder {
        TextView txt_name;
        TextView txt_number;

    }

    @Override
    public int getCount() {
        return worldpopulationlist.size();
    }//worldpopulationlist資料的數量

    @Override
    public WorldPopulation getItem(int position) {
        return worldpopulationlist.get(position);//worldpopulationlist資料的位置
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View view, ViewGroup parent) {
        final ViewHolder holder;
        if (view == null) {
            holder = new ViewHolder();
            view = inflater.inflate(R.layout.listview_item, null);
            // Locate the TextViews in listview_item.xml
            holder.txt_name = (TextView) view.findViewById(R.id.txt_name);
            holder.txt_number = (TextView) view.findViewById(R.id.txt_number);
            view.setTag(holder);
        } else {
            holder = (ViewHolder) view.getTag();
        }
        // Set the results into TextViews
        holder.txt_name.setText(worldpopulationlist.get(position).getName());
        holder.txt_number.setText(worldpopulationlist.get(position).getNumber());

        // Listen for ListView Item Click
        view.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Send single item click data to SingleItemView Class
                Intent intent = new Intent(mContext, Main.class);
                // Pass all data rank
                intent.putExtra("name", (worldpopulationlist.get(position).getName()));
                // Pass all data country
                intent.putExtra("number", (worldpopulationlist.get(position).getNumber()));
                mContext.startActivity(intent);
            }
        });

        return view;
    }

    // Filter Class
    public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        worldpopulationlist.clear();
        if (charText.length() == 0) {
            worldpopulationlist.addAll(arraylist);
        } else {
            for (WorldPopulation wp : arraylist) {
                if (wp.getName().toLowerCase(Locale.getDefault()).contains(charText)) {
                    worldpopulationlist.add(wp);
                }
            }
        }
        notifyDataSetChanged();

    }

}
WorldPopulatio.java
package com.androidbegin.filterlistviewtutorial;
public class WorldPopulation {
 private String name;
 private String number;

 public WorldPopulation(String rank, String country) {
  this.name = rank;
  this.number = country;
 }
 public String getName() {
  return this.name;
 }
 public String getNumber() {
  return this.number;
 }

}
參考資料:
http://cookiesp.pixnet.net/blog/post/84190702-android-intent%26bundle-%E5%82%B3%E9%81%9E%E8%B3%87%E6%96%99%28%E5%8C%85%E5%90%AB%E5%82%B3%E9%81%9E%E8%87%AA%E5%AE%9A%E7%BE%A9%E7%89%A9
http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/

沒有留言:

張貼留言