1

I created a Custom ListView using BaseAdapter now I want to populate this Listview with Contact Name and Number from Phone book..I am trying this..

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class Rabtaye extends Activity {

    ListView msgList;
    ArrayList<MessageDetails> details;
    AdapterView.AdapterContextMenuInfo info;

    Cursor cursor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);

        msgList = (ListView) findViewById(R.id.MessageList);
        details = new ArrayList<MessageDetails>();

        MessageDetails Detail = new MessageDetails();
        cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                null, null);
        startManagingCursor(cursor);

        String info[] = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone._ID };
         for(String a:info){
         Detail.setName(a);
         }
         Detail.setNumber("0313");
         details.add(Detail);
//      int to[] = { R.id.name, R.id.number };
//      ListAdapter cursada = new SimpleCursorAdapter(this,
//              android.R.layout.simple_expandable_list_item_2, cursor, info,
//              to);
        msgList.setAdapter(new CustomAdapter(details, this));


        msgList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                TextView s = (TextView) arg1.findViewById(R.id.name);
                String abc = s.getText().toString();
                Toast.makeText(Rabtaye.this, abc, Toast.LENGTH_LONG).show();
            }
        });
    }
}

I used different ways, but I am not able to populate ListView with Contact Name or Number. In this code I have to statically add name and number...I am quite confuse here..little help would be greatly appreciated. Thanks in Advance. I am newbie so please go easy on me..:)

4

2 に答える 2

1

うーん。あなたは正しい方向に進んでいますが、私はあなたが少しさまよっていると思います。

ListViewはビューオブジェクトであり、BaseAdapterではありません。あなたのコードからわかる限り、ListView用のカスタムアダプタは必要ありません。

通常のCursorAdapterをListViewにバインドし、CursorLoaderを使用して連絡先プロバイダーから必要な連絡先データをロードしてから、結果のカーソルをCursorAdapterに移動する必要があります。

これを行うための手順は、このAndroidトレーニングクラス 「バックグラウンドでのデータの読み込み」にあります。

ListView自体から取得できないカスタムListViewに何が必要ですか?

于 2013-03-14T20:21:43.990 に答える
1

複数のアイテムのリストを ListView に入れている場合 (名前、番号などを行っているように見えます)、独自のカスタム アダプターを作成する必要があります。アクティビティまたは新しいクラスでBaseAdapterクラスを拡張します。getView()次に、メソッドをオーバーライドする必要があります。これは、新しいアイテムが膨らむたびに呼び出されるものです。

作成時に にArrayList渡します。BaseAdapterアダプターのgetView()メソッドは、ロジックをコーディングしてデータを取得し、それをリスト項目として表示する場所です。TextViews各リスト項目のさまざまな子のために、あなたとその他のものを含む各リスト項目のレイアウトとして新しい XML ファイルを定義する必要があります。これがデータを入力するものです。

「baseadapter」で検索すると、あちこちにたくさんの例があります。これは、かなり良いイントロを提供するものです

于 2013-03-14T20:15:07.177 に答える