1

我现在使用创建了一个自定义BaseAdapter列表视图我想用电话簿中的联系人姓名和号码填充这个列表视图..我正在尝试这个..

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();
            }
        });
    }
}

我使用了不同的方法,但我无法使用联系人姓名或号码填充 ListView。在这段代码中,我必须静态添加名称和号码……我在这里很困惑……不胜感激。提前致谢。我是新手,所以请对我放轻松..:)

4

2 回答 2

1

如果您将多个项目列表放入 ListView 中(看起来您正在处理名称、编号等),您必须创建自己的自定义适配器。在您的活动中或在新类中扩展BaseAdapter类。然后你必须重写该getView()方法。每次新项目膨胀时都会调用此方法。

您在创建它时将其传递ArrayListBaseAdapter。适配器的getView()方法是您编写逻辑以获取数据并将其显示为列表项的地方。您必须为每个列表项定义一个新的 XML 文件作为布局,每个列表项包含您的TextViews和每个列表项中不同子项的内容,这就是您使用数据填充的内容。

如果你搜索“baseadapter”,就会有很多例子。这是一个很好的介绍。

于 2013-03-14T20:15:07.177 回答
1

嗯。你在正确的轨道上,但我认为你有点徘徊。

ListView 是一个视图对象,而不是 BaseAdapter。据我从您的代码中可以看出,您的 ListView 不需要自定义适配器。

您应该做的是将常规 CursorAdapter 绑定到您的 ListView,使用 CursorLoader 从 Contacts Provider 加载您想要的联系人数据,然后将生成的 Cursor 移动到 CursorAdapter。

您可以在此 Android 培训课程中找到执行此操作的说明: 在后台加载数据

您想要从 ListView 本身无法获得的自定义 ListView 中的什么?

于 2013-03-14T20:21:43.990 回答