无法为 AlertDialog.Builder 设置适配器



我正在尝试实现这个:分享脸书

在我的应用程序中,我有一个按钮,我希望当用户单击我的按钮时会出现警报对话框,但我发现适配器未设置为 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(),但它没有打印。

当我运行此代码时,请与...它没有任何内容出现!

我该如何解决这个问题?

像下面这样实例化你的发送意图,

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

最新更新