0

我正在尝试实现这一点:分享 Facebook

在我的应用程序中,我有一个按钮,当用户单击我的按钮时,我希望出现 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(),它没有打印。

当我运行此代码时,与...共享它似乎没有任何内容!

我怎样才能解决这个问题?

4

1 回答 1

1

像下面一样实例化您的 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();
            }
        });
    }

}
于 2012-11-22T09:28:21.083 回答