android - 从 android ContactsContract 数据库加载数据后 fragment 未填充

标签 android listview android-adapter contactscontract

我试图在 ListView 中显示电话联系人,但在第一次获得许可后 UI 没有更新。我只能在重新启动应用程序时看到更改。 我尝试使用 notifyDataSetChanged 但没有任何改变。

 public class ContactFragment extends Fragment {
         ArrayList<Contact> contact;
         ListView listView;
         ContactAdapter adapter;
         public static final int RequestPermissionCode = 1;


    Cursor cursor;
    String name, number;

    public ContactFragment() {

    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.contact_layout, container, false);
contact=new ArrayList<>();
        accesscontact();


        adapter = new ContactAdapter(getActivity(), contact);

         listView = (ListView) rootView.findViewById(R.id.listview);



        listView.setAdapter(adapter);
        return rootView;
    }
    public void GetContactsIntoArrayList(){

        cursor = getActivity().getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);

        while (cursor.moveToNext()) {

            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            contact.add(new Contact(name,number));
        }
        cursor.close();

    }
    protected void accesscontact()
    {
    if (ContextCompat.checkSelfPermission(getActivity(),
    Manifest.permission.READ_CONTACTS)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(getActivity(),
                new String[]{Manifest.permission.READ_CONTACTS},
                RequestPermissionCode);
    } else {

        GetContactsIntoArrayList();


    }
}


    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case RequestPermissionCode: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    GetContactsIntoArrayList();



                } else {
                    Toast.makeText(getActivity().getApplicationContext(),
                            "Can't read contact_layout without permission", Toast.LENGTH_LONG).show();
                    return;
                }
            }
        }
    }

最佳答案

尝试以下操作:

 adapter = new ContactAdapter(getActivity(), contact);
 listView = (ListView) rootView.findViewById(R.id.listview);
 listView.setAdapter(adapter);

在 GetContactsIntoArrayList() 方法中使用这些行

public void GetContactsIntoArrayList(){

        cursor = getActivity().getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null, null, null);

        while (cursor.moveToNext()) {

            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

            number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            contact.add(new Contact(name,number));
        }
        cursor.close();
 adapter = new ContactAdapter(getActivity(), contact);
 listView = (ListView) rootView.findViewById(R.id.listview);
 listView.setAdapter(adapter);

    }

希望这会奏效。

关于android - 从 android ContactsContract 数据库加载数据后 fragment 未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055981/

相关文章:

java - com.parse.ParseException : bolts. ExecutorException:执行器抛出异常

android - 如何选择一个 ListView 行并突出显示它(几个 TextView)?

java - 扩展 AppCompatActivity 时,Android ListView 不会填充并抛出错误

android - 动态水平 View

java - 使用 FileOutputStream 将数据结构写入文件?

Android webview 无法呈现通过 iframe 嵌入的 youtube 视频

java - 为什么必须声明 "Integer int1"才能在 onCreate 和 onClick 方法中使用它?

c# - 我可以在 ListView 的详细信息模式下显示链接吗?

android - 更改 recyclerview 适配器中的项目

java - 无法解决方法 getResource().getColor() 错误