【问题标题】:How to display Dialog in Contacts如何在联系人中显示对话框
【发布时间】:2012-02-06 06:17:05
【问题描述】:

我将此代码用于按钮,之后我在联系人活动中:

btnPhonebook.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent pb = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(pb, 1);
        }
    });

之后,有一个包含许多联系人的联系人列表。现在我想要这样,每当我点击一个联系人时,就会显示一个对话框。我怎样才能做到这一点。任何人都可以帮助我,因为目前我没有问题如何制作它。我已经尝试过使用此代码,但它不起作用。

Dialog dialog = new Dialog(this);
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Choose a phone number");

            ListView lp = new ListView(this);
            lp.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, _listPhoneNumber));

            builder.setView(lp);
            dialog = builder.create();

我也把上面的代码放在了 onActivityResult() 方法中。

提前致谢。

【问题讨论】:

    标签: android contacts contact


    【解决方案1】:

    而不是使用内置 Intent 来显示联系人.. 你为什么不自己构建列表,然后做你计划做的事情。

    您是否将对话框设置为 .show()?

    【讨论】:

      【解决方案2】:

      很简单,

      progDailog = ProgressDialog.show(loginAct,"Process ", "please wait....",true,true);
      
      new Thread ( new Runnable()
      {
           public void run()
           {
            // your loading code goes here
           }
      }).start();
      
       Handler progressHandler = new Handler() 
       {
      
           public void handleMessage(Message msg1) 
           {
      
               progDailog.dismiss();
               }
       }
      

      【讨论】:

        【解决方案3】:

        您无法在原生通讯录应用中显示Dialog

        但是,您可以自己获取联系人并将其显示在 ListViewCheckBox 中,然后继续下一步。

        Here 是一个最简单的ListView 来显示联系人。你可以自己编辑。

        【讨论】:

          【解决方案4】:

          我已经在我的应用程序中这样做了,我们如何从 listview 获取联系方式, 使用此数据,您可以显示您的对话框。

              lv.setClickable(true);
              lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
          
              @Override
              public void onItemClick(AdapterView <? > arg0, View arg1, int position, long arg3) {
          
                  Object o = lv.getItemAtPosition(position);
                  Toast.makeText(getApplicationContext(), o.toString(), Toast.LENGTH_LONG).show();
                  String infoString = o.toString();
                  String arr[] = infoString.split(",");
                  String names[] = arr[1].split("=");
                  id = Integer.parseInt(names[1]);
                  System.out.println("info" + id);
          
                  db = dh.getReadableDatabase();
          
                  String select = "select * from '" + dh.tablename + "' WHERE adb_id='" + id + "' ";
                  Cursor c = db.rawQuery(select, null);
          
                  if (c.moveToFirst()) {
          
                      name.setText(c.getString(1));
                      address.setText(c.getString(2));
                      contact.setText(c.getString(3));    
                  }    
              }
          });
          

          【讨论】:

            【解决方案5】:

            如果您想在联系人中使用对话框,那么您必须为联系人制作自己的自定义布局。例如,请参见下面的代码... 在按钮上单击

            public static final int NUMBER_SELECT = 1;
            Intent intent = new Intent(clsBlockNumbers.this,CallLog_Activity.class);
            startActivityForResult(intent,NUMBER_SELECT);
            

            在同一个Activity中写入/制作onActivityResult

            protected void onActivityResult(int requestCode, int resultCode, Intent data)
                    {
                        switch(requestCode) {
                        case NUMBER_SELECT: 
                            if (resultCode == RESULT_OK) {
                                String number = data.getStringExtra("SelectedNumber");
                                if(number == null)
                                {
                                    Toast.makeText(this, "No Record found: ", Toast.LENGTH_LONG).show();
                                }
                                else
                                {
                                    //Your code
                                }
                                break;
                            }
            
                        }
            
                    }
            

            CallLog_Activity.java

            package com.demo;
            
            import java.util.ArrayList;
            
            import android.app.Activity;
            import android.content.Intent;
            import android.database.Cursor;
            import android.net.Uri;
            import android.os.Bundle;
            import android.util.Log;
            import android.view.View;
            import android.view.Window;
            import android.widget.AdapterView;
            import android.widget.AdapterView.OnItemClickListener;
            import android.widget.ListView;
            import android.widget.TextView;
            
            
            public class CallLog_Activity extends Activity implements OnItemClickListener
            {
                ArrayList<String> strAyyNumber,strAyyType,listNumber, strType, strAyyName ;
            
                private CallLogListAdapter adapter ;
                CallLog callLog;
                String noType;
                ListView listCallLog;
                private String[] listCallLog_arr={};
                Cursor cursor;
                String strArr;
                TextView tv, tv1, txtEmptyMsg;
            
            
                public void onCreate(Bundle savedInstanceState)
                {
                    super.onCreate(savedInstanceState);
                    requestWindowFeature(Window.FEATURE_NO_TITLE);
                    setContentView(R.layout.calllog_list);
            
                    callLog = new CallLog();
            
                    listCallLog = (ListView)findViewById(R.id.list);
            
                    strAyyNumber = new ArrayList<String>();
                    strAyyType = new ArrayList<String>();
                    strAyyName = new ArrayList<String>();
                    listNumber = new ArrayList<String>();
                    strType = new ArrayList<String>();
            
                    System.out.println("In Call log list activity");            
                    try
                    {
            
                        final String[] projection = null;
                        final String selection = null;
                        final String[] selectionArgs = null;
                        final String sortOrder = "DATE DESC";
                        Cursor cursor = this.getContentResolver().query(
                                Uri.parse("content://call_log/calls"),
                                projection,
                                selection,
                                selectionArgs,
                                sortOrder);
                        if (cursor != null) 
                        {
                            //Loop through the call log.
                            while (cursor.moveToNext()) 
                            { 
                                //Common Call Log Items
                                String callNumber = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                                strAyyNumber.add(callNumber);
            
                                String callType = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.TYPE));
                                strAyyType.add(callType);
            
                                String callName = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.CACHED_NAME));
                                strAyyName.add(callName);
            
            
            
                            }               
            
                            for(int i=0;i<strAyyNumber.size();i++)
                            {
                                String no = strAyyNumber.get(i).toString();//.concat("\n").concat(strAyyType.get(i).toString());
                                Log.d("No length ", "No length ::" + no.length());
                                listNumber.add(no);
                            }
            
            
                            listCallLog_arr = listNumber.toArray(new String[listNumber.size()]);
            
                            Log.d("size", "list listCallLog_arr"+ listCallLog_arr.length);
            
                            if(!listNumber.isEmpty())
                            {
                                listCallLog.setVisibility(View.VISIBLE);
                                adapter = new CallLogListAdapter(CallLog_Activity.this,R.layout.calllog_list_row, listCallLog_arr,strAyyNumber,strAyyType,strAyyName);
                                listCallLog.setAdapter(adapter);
                            }
                            else
                            {   
                                txtEmptyMsg = (TextView)findViewById(R.id.txtEmptyMsg);
                                txtEmptyMsg.setVisibility(View.VISIBLE);
                                txtEmptyMsg.setText("No Record found Press Back to Continue");
                            }
                            listCallLog.setOnItemClickListener(this);
            
                        }
                        listCallLog.setOnItemClickListener(this);
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
            
            
                }
            
                @Override
                public void onItemClick(AdapterView<?> arg0, View v, int position, long id)
                {
            
                    String o = arg0.getItemAtPosition(position).toString();
                    Intent returnIntent = new Intent();
            
                    StringBuffer sb = new StringBuffer(o);
                    sb.reverse().setLength(10);
            
                    Log.d("Item click", "String buffer"+ sb);
            
                    String revercenum = sb.toString().trim();
            
                    Log.d("Item click", "revercenum "+ revercenum);
            
                    StringBuffer sb1 = new StringBuffer(revercenum);
                    sb1.reverse();
                    Log.d("Item click", "sb1 "+ sb1);
            
                    String revercenum1 = sb1.toString().trim();
                    revercenum1.replace("+", "");
                    Log.d("Item click", "revercenum 1"+ revercenum1);
            
                    returnIntent.putExtra("SelectedNumber",revercenum1.replace("+", ""));
                    setResult(RESULT_OK,returnIntent);      
                    finish();
                }
            }
            

            colllog_list.xml

            <?xml version="1.0" encoding="utf-8"?>
            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
            
            <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent" android:layout_height="fill_parent" 
            android:visibility="gone"
            />
            
            <TextView android:id="@+id/txtEmptyMsg"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:textStyle="bold"
                    android:textSize="25dp"
                    android:text=""
                    android:visibility="gone"
                /> 
            
            </LinearLayout>
            

            colllog_list_row.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"
                android:orientation="horizontal">
            
            
                    <LinearLayout 
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
            
            
                            <TextView
                                android:id="@+id/txtCallLogName"
                                android:layout_width="wrap_content" android:layout_height="fill_parent" 
                                android:textSize="20dp" android:layout_margin="10dp" 
                                android:layout_weight="1" />
            
                            <TextView
                                android:id="@+id/txtCallLogNumber"
                                android:layout_width="wrap_content" android:layout_height="fill_parent" 
                                android:textSize="20dp" android:layout_weight="1"
                                android:layout_marginLeft="10dp" android:layout_marginBottom="10dp" 
                                android:layout_marginTop="5dp" android:layout_marginRight="10dp"    />
            
                    </LinearLayout>
            
                    <TextView
                        android:id="@+id/txtCallLogType"
                        android:layout_width="wrap_content" android:layout_height="fill_parent" 
                        android:textSize="12dp"  android:layout_marginBottom="10dp" 
                        android:layout_marginTop="10dp" android:layout_marginRight="10dp"
                        android:layout_alignParentRight="true"  />
            
            </RelativeLayout>
            

            CallLogListAdapter.java

            package com.Demo;
            
            import java.util.ArrayList;
            
            import android.app.Activity;
            import android.util.Log;
            import android.view.LayoutInflater;
            import android.view.View;
            import android.view.ViewGroup;
            import android.widget.ArrayAdapter;
            import android.widget.TextView;
            
            public class CallLogListAdapter extends ArrayAdapter<Object>
            {
                private static final String TAG = "CallLogListAdapter";
                private LayoutInflater inflater = null;
                private int resource;
                private Activity activity;
                CallLog callLog ;
                String[] strTemp;
                ArrayList<String> arrayItem = new ArrayList<String>();
                ArrayList<String> ayyType = new ArrayList<String>();
                ArrayList<String> tempType = new ArrayList<String>();
                ArrayList<String> ayyName = new ArrayList<String>();
                ArrayList<String> tempName = new ArrayList<String>();
                ArrayList<String> tempName1 = new ArrayList<String>();
            
                ArrayList<String> tempNo = new ArrayList<String>();
            
                String strType, strName, strName1, strNo ;
                String[] tmpName, tmpName1, tmpNo;
            
                public CallLogListAdapter(Activity activity, int resorce, String[] strTemp, ArrayList<String> arryListNumber, ArrayList<String> arryListType, ArrayList<String> arryListName) 
                {
                    super(activity, resorce,strTemp);
                    this.resource = resorce;
                    this.activity = activity;
                    this.strTemp = strTemp;
                    Log.d("in adapter", "In Adapter");
                    arrayItem = arryListNumber;
                    ayyType = arryListType;
                    ayyName = arryListName;
                }
            
                @Override
                public View getView(int position, View convertView, ViewGroup parent) 
                {
                    Log.d("in adapter", "In get View");
            
                    ViewHolder holder;
            
                    if (convertView == null)
                    {
            
                        LayoutInflater layoutInflater = LayoutInflater.from(getContext());
                        convertView  = layoutInflater.inflate(resource, parent, false);
                        holder = new ViewHolder();
            
                        holder.txtName = (TextView)convertView.findViewById(R.id.txtCallLogName);
                        holder.txtNumber = (TextView)convertView.findViewById(R.id.txtCallLogNumber);
                        holder.txtType = (TextView)convertView.findViewById(R.id.txtCallLogType);
            
                        holder.txtName.setVisibility(View.VISIBLE);
                        try
                        {
                            for(int i=0;i<ayyName.size();i++)
                            {
                                strName = ayyName.get(i);
                                Log.d("in get view in  ", "Name is: **"+ strName);
                                tempName.add(strName);  
                            }
            
                            tmpName = tempName.toArray(new String[tempName.size()]);
                            if(tmpName[position] == null)
                            {
                                holder.txtName.setVisibility(View.GONE);                
                            }
                            else
                            {
                                holder.txtName.setVisibility(View.VISIBLE);
                                holder.txtNumber.setTextSize(12);
                                holder.txtName.setText(""+ tmpName[position]);
                            }
            
            
                        }
                        catch (NullPointerException e) 
                        {
                            e.printStackTrace();
                        }
            
            
                        for(int i=0;i<arrayItem.size();i++)
                        {
                            strNo = arrayItem.get(i);//.toString();
                            Log.d("in get view in  ", "Number is: **"+ strNo);
                            tempNo.add(strNo);
                        }
            
                        String[] tmpNo = tempNo.toArray(new String[tempNo.size()]);
            
                        Log.d("in get view ", "Number is String[]** : "+ tmpNo[position]);
                        holder.txtNumber.setText(""+ tmpNo[position]);
            
                        for(int i=0;i<ayyType.size();i++)
                        {
                            strType = ayyType.get(i).toString();
            
                            if(strType.equalsIgnoreCase("1"))
                            {
                                strType = "Incoming Call";
                            }
                            else if(strType.equalsIgnoreCase("2"))
                            {
                                strType = "Outgoing Call";
            
                            }
                            else if(strType.equalsIgnoreCase("3"))
                            {
                                strType = "Missed Call";
                            }
                            tempType.add(strType);
                        }
            
                        String[] tmpType = tempType.toArray(new String[tempType.size()]);
            
                        holder.txtType.setText(""+ tmpType[position]);
                        convertView.setTag(holder);
            
                    } else {
                         holder=(ViewHolder)convertView.getTag();
                    }
                    return convertView;
                }
            
                public static class ViewHolder
                {
                    private TextView txtNumber, txtType, txtName;
                }
            
            }
            

            希望对你有帮助.. :)

            【讨论】:

            • 非常感谢您的代码。但我还是不明白:私有CallLogListAdapter适配器和CallLog callLog在哪里,什么是;在 CallLogActivity.java 谢谢。
            • 哦,现在好了,让我看看...非常感谢
            • 不客气。如果它真的对你有帮助,那就把它改正,以便其他人可以使用它。
            • 对不起,我看到这段代码显示 callLog- Uri.parse("content://call_log/calls"),我怎样才能得到电话簿列表?
            • 是的,如果你想使用联系人,它就是 CallLog 列表的例子,那么它必须是不同的 URI。你必须找出它。:(
            猜你喜欢
            • 1970-01-01
            • 2013-05-15
            • 2012-03-14
            • 2016-01-08
            • 1970-01-01
            • 1970-01-01
            • 2018-09-08
            • 1970-01-01
            相关资源
            最近更新 更多