无法设置适配器AlertDialog.Builder

问题描述:

我想实现这个:Share Facebook无法设置适配器AlertDialog.Builder

在我的申请,我有一个按钮,我想,当用户点击了我的按钮AlertDialog出现,但我弄明白了适配器未设置为AlerDialog。

我用这个代码:

shareb = (ImageView) findViewById(R.id.shareb); 
shareb.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View v) { 

     sendIntent = new Intent(); 
     sendIntent.setAction(Intent.ACTION_SEND); 
     activities = mContext.getPackageManager().queryIntentActivities(sendIntent, 0); 
     builder = new AlertDialog.Builder(mContext); 
     builder.setTitle("Share with..."); 
     final ShareIntentListAdapter adapter = new ShareIntentListAdapter((Activity) mContext, R.layout.basiclistview, activities.toArray()); 
     builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       ResolveInfo info = (ResolveInfo) adapter.getItem(which); 
       if (info.activityInfo.packageName.contains("facebook")) { 
        postFacebookMessage(); 
       } else { 
        Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
        intent.setClassName(info.activityInfo.packageName, info.activityInfo.name); 
        intent.setType("*/*"); 
        intent.putExtra(Intent.EXTRA_SUBJECT, "I just read " + knowTitle); 
        intent.putExtra(Intent.EXTRA_TEXT, knowTitle + "Read the full article via MomsApp by EnfaMama A+ at http://meadjohnsonasia.com.my/mobileapp"); 
        ((Activity) mContext).startActivity(intent); 
       } 

      } 

     }); 

     builder.create().show(); 
    } 
}); 

,然后我用这个作为适配器:

public class ShareIntentListAdapter extends ArrayAdapter <Object> { 
    Activity context; 
    private final Object[] items; 

    int layoutId; 


    public ShareIntentListAdapter(Activity context, int layoutId, Object[] items) { 
     super(context, layoutId, items); 

     this.context = context; 
     this.items = items; 
     this.layoutId = layoutId; 


    } 

    public View getView(int pos, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View row = inflater.inflate(layoutId, null); 
     TextView label = (TextView) row.findViewById(R.id.text1); 
     label.setText(((ResolveInfo) items[pos]).activityInfo.applicationInfo.loadLabel(context.getPackageManager()).toString()); 
     ImageView image = (ImageView) row.findViewById(R.id.logo); 
     image.setImageDrawable(((ResolveInfo) items[pos]).activityInfo.applicationInfo.loadIcon(context.getPackageManager())); 
     System.out.println(layoutId); 
     return (row); 

    } 


} 

我发现getView功能不运行!因为我设置了System.out.println(),并且没有打印。

当我运行这段代码时,分享......没有任何内容!

我该如何解决这个问题?

+1

你测试,看看你是否有在'activities'名单的东西吗? – Luksprog

+0

这就是我刚发现的!我没有任何活动列表! activities = mContext.getPackageManager()。queryIntentActivities(sendIntent,0); 当我打印它的空!似乎我什么也没得到,但为什么? –

+0

尝试在'queryIntentActivities'方法中添加'PackageManager.MATCH_DEFAULT_ONLY'标志而不是'0'。 – Luksprog

实例化sendIntend像下面,

sendIntent = new Intent(Intent.ACTION_SEND, null); 
sendIntent.addCategory(Intent.CATEGORY_DEFAULT); 
sendIntent.setType("text/plain"); 

那么你的列表将被填补。

我的意思是,

public class MainActivity extends Activity { 

    ImageView shareb; 
    Intent sendIntent; 
    AlertDialog.Builder builder; 
    List<ResolveInfo> activities; 
    Context mContext; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mContext= getApplicationContext(); 

     shareb = (ImageView) findViewById(R.id.imageView1); 
     shareb.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) {    
       sendIntent = new Intent(Intent.ACTION_SEND, null); 
       sendIntent.addCategory(Intent.CATEGORY_DEFAULT); 
       sendIntent.setType("text/plain"); 

       activities = mContext.getPackageManager().queryIntentActivities(sendIntent, 0); 

       builder = new AlertDialog.Builder(MainActivity.this); 
       builder.setTitle("Share with..."); 
       final ShareIntentListAdapter adapter = new ShareIntentListAdapter(MainActivity.this, R.layout.basiclistview, activities.toArray());     
       builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         // TODO Auto-generated method stub 
         ResolveInfo info = (ResolveInfo) adapter.getItem(which); 
         if (info.activityInfo.packageName.contains("facebook")) { 
          //postFacebookMessage(); 
         } else { 
          Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
          intent.setClassName(info.activityInfo.packageName, info.activityInfo.name); 
          intent.setType("*/*"); 
          intent.putExtra(Intent.EXTRA_SUBJECT, "I just read "); 
          intent.putExtra(Intent.EXTRA_TEXT, "Read the full article via MomsApp by EnfaMama A+ at http://meadjohnsonasia.com.my/mobileapp"); 
          ((Activity) mContext).startActivity(intent); 
         } 

        } 

       }); 

       builder.create().show(); 
      } 
     }); 
    } 

} 
+0

列表emty再 –

+0

https://github.com/talhakosen/ShareIntent你可以尝试我的例子,我把它放在github上?它在我身边运作 – Talha

+0

它现在的作品,谢谢 –