2014-02-19 14 views
5

So passen Sie die Android-Freigabe für Facebook-App an. Wenn ich den Anteil Intent verwende, erhalte ich den folgenden Dialog.So passen Sie das Share-Intent-OnClick-Ereignis in Android an

Share Intent Dialog

Aber ich bin mit Facebook sdk für die Zeit nach dem Bild und Text. Und wie man es anpasst, wenn wir im obigen Dialog auf das Facebook-Symbol klicken, wird es zu meinem benutzerdefinierten Facebook-Dialog ...

+0

Versuchen Sie diesen Link http://stackoverflow.com/questions/6827407/how-to-customize-share-intent-in-android?rq=1 – Hariharan

+0

Ist es möglich, das Onclick-Ereignis für die Freigabe int @ HariharanTamilan –

Antwort

11

Mit dem folgenden Code können Sie die Liste der Social-Media-Networking-Apps Liste, in denen installiert sind dein Handy.

Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND); 
sendIntent.setType("text/plain"); 
List activities = ShareList.this.getPackageManager().queryIntentActivities(sendIntent, 0); 

Senden Sie diese Liste Klasse Adapter:

ListView lv=(ListView)findViewById(R.id.listView1); 
final ShareAdapter adapter=new ShareAdapter(ShareList.this,activities.toArray()); 
lv.setAdapter(adapter); 

Hier ist der Adapter Klassencode:

public class ShareAdapter extends BaseAdapter { 
Object[] items; 
private LayoutInflater mInflater; 
Context context; 

public ShareAdapter(Context context, Object[] items) { 
    this.mInflater = LayoutInflater.from(context); 
    this.items = items; 
    this.context = context; 
} 

public int getCount() { 
    return items.length; 
} 

public Object getItem(int position) { 
    return items[position]; 
} 

public long getItemId(int position) { 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.singleitem, null); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.textView1); 
     holder.logo = (ImageView) convertView.findViewById(R.id.imageView1); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.name 
      .setText(((ResolveInfo) items[position]).activityInfo.applicationInfo 
        .loadLabel(context.getPackageManager()).toString()); 

    holder.logo 
      .setImageDrawable(((ResolveInfo) items[position]).activityInfo.applicationInfo 
        .loadIcon(context.getPackageManager())); 

    return convertView; 
} 

static class ViewHolder { 

    TextView name; 
    ImageView logo; 
}} 

die spezifische Social-Media-Netzwerk in der Listenansicht Umgang mit dem folgenden Code:

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // TODO Auto-generated method stub 
      ResolveInfo info = (ResolveInfo) adapter.getItem(arg2); 
      if(info.activityInfo.packageName.contains("facebook")) { 
       new PostToFacebookDialog(context, body).show(); 
     //here u can write your own code to handle the particular social media networking apps.  
       Toast.makeText(getApplicationContext(), "FaceBook", Toast.LENGTH_LONG).show(); 
      } else { 
       Intent intent = new Intent(android.content.Intent.ACTION_SEND); 
       intent.setClassName(info.activityInfo.packageName, info.activityInfo.name); 
       intent.setType("text/plain"); 
       intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
       intent.putExtra(Intent.EXTRA_TEXT, "body"); 
       ((Activity)ShareList.this).startActivity(intent); 
      } 

     } 
    }); 
+1

Große Antwort zu behandeln. Aber kannst du mir sagen, was genau 'R.idlistView1' ist? –

+0

Vielen Dank. Es war ein wenig schwierig, aber mit deinem Rat habe ich es zum Laufen gebracht. Morgen werde ich meine Lösung zeigen, als zusätzliches "How to" - ich bin nur ein Anfänger, aber vielleicht wird dieses Zeug klarer, wenn ich meinen Code anderen erläutere. Danke vielmals! –

1

Ich habe die Lösung Venu verwendet, um die "angepassten Freigabeabsicht" zu erhalten. Ich hatte nur wenig Probleme mit der Erstellung der XML .. Also hier möchte ich anderen Android Anfänger zeigen, wie custom_share_list_white .xml hinzuzufügen. Vielleicht hilft es anderen, es auch funktionieren zu lassen.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal"> 

     <ListView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/listView" 
      android:footerDividersEnabled="false"/> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center_vertical"> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:id="@+id/imageView"/> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Large Text" 
       android:id="@+id/tv_share_adapter" 
       android:gravity="center_vertical" 
       android:layout_gravity="center_vertical"/> 
     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

in ShareAdapter.java:

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.custom_share_list_white, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.tv_share_adapter); 
      holder.logo = (ImageView) convertView.findViewById(R.id.imageView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.name.setText(((ResolveInfo) items[position]).activityInfo 
            .applicationInfo.loadLabel(context.getPackageManager()).toString()); 

     holder.logo.setImageDrawable(((ResolveInfo) items[position]).activityInfo 
              .applicationInfo.loadIcon(context.getPackageManager())); 

     return convertView; 
    }