簡體   English   中英

使用ArrayAdapter內部的Facebook“共享”對話框共享內容?

[英]Sharing content using the Facebook Share Dialog inside ArrayAdapter?

我有一個自定義ArrayAdapter,其中每個項目都有一個共享按鈕。 我在日常活動中使用Facebook分享對話框沒有任何問題,但是現在我無法使用它來共享列表項。

如果我是對的,那么facebook共享對話框需要一項活動才能正常工作,我的自定義ArrayAdapter沒有一個活動,但是我必須將數據從單個項目傳遞到共享對話框,因此它必須進入arrayadapter類中,對嗎?

我試圖使用一個界面將圖像地址和名稱傳回主活動,但是當我按下按鈕時,它一直崩潰。

我是朝着正確的方向發展嗎,還是從列表視圖內部共享項目數據的另一種方法?

謝謝!

FeedGridViewAdapter (custom ArrayAdapter):

    public class FeedGridViewAdapter extends ArrayAdapter<FeedItemsSetter> {
        private Context context;
        private int layoutResourceId;
        private ArrayList<FeedItemsSetter> data = new ArrayList<FeedItemsSetter>();
        private TextView locationName;
        private ImageView image;
        private ImageView feedUserImage;
        private TextView cityName;
        private TextView userInfo; 
        private String[] separatedLikerData;
        private FeedItemsSetter item;

        public interface facebookShareListener { 
            public void onSharePressed(String values);
        }   

        facebookShareListener mListener;    

        public FeedGridViewAdapter(Context context, ArrayList<FeedItemsSetter> data) {
            super(context, android.R.id.content, data); 
            this.context = context;
            this.data = data;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater vi = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = vi.inflate(R.layout.feed_grid, null);

                item = data.get(position);          

                TextView[] likers = new TextView[10];

                locationName = (TextView) view.findViewById(R.id.locName);
                locationName.setText(item.getTitle());

                cityName = (TextView) view.findViewById(R.id.cityName);
                cityName.setText(item.getCategory());

                userInfo = (TextView) view.findViewById(R.id.feedUserName);
                userInfo.setText(item.getUser());

                feedUserImage = (ImageView) view.findViewById(R.id.feedUserImage);
                Picasso.with(context)
                .load("https://graph.facebook.com/" + item.getUserId() + "/picture?type=large") 
                .placeholder(R.drawable.placeholder)
                .error(R.drawable.ic_launcher)
                .transform(new RoundedTransformation(90, 4))
                .resize(100, 100)         
                .centerCrop()  
                .into(feedUserImage);  

                image = (ImageView) view.findViewById(R.id.image);          
                Picasso.with(context).load("http://www.edmondvarga.com/gastrolove/uploads/" + item.getImage())
                .into(image); 

                separatedLikerData = item.getLiker().split(",");

                if(separatedLikerData.length < 5){
                LinearLayout layout = (LinearLayout) view.findViewById(R.id.likerNames);             
                likers[position] = new TextView(context); 
                likers[position].setText(separatedLikerData[0] + ", ");
                likers[position].setTextColor(Color.parseColor("#d52e2e"));
                likers[position].setTypeface(null, Typeface.BOLD_ITALIC);
                likers[position].setTextSize(13);                   

                layout.addView(likers[position]);

                likers[position].setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {                               
                        Intent in= new Intent(context, UserProfile.class);
                        in.putExtra("user", separatedLikerData[0]);
                        in.putExtra("userId", separatedLikerData[1]);
                        context.startActivity(in);                              
                    }

                }); 
                }

               //-----------Iterface implmentation -----------------

                Button feedShare = (Button) view.findViewById(R.id.feedShareBtn); 
                feedShare.setOnClickListener(new OnClickListener()  {
                    @Override
                      public void onClick(View v)  {                    
                        mListener.onSharePressed("image link");
                    }
                   }); 

            return view;
        }

    }

主類:

...

public class OffersFragmentActivity extends Fragment implements
        OnItemClickListener, FeedGridViewAdapter.facebookShareListener {

    private GridView gridView;
    private GridViewAdapter customGridAdapter;
    ArrayList<ImageItem> imageItems = new ArrayList<ImageItem>();
    View v;
    private SQLiteDataSource datasource;
    private ListView TasteMakersListView;
    private ArrayList<TasteMakers> tasteMakersList = new ArrayList<TasteMakers>();
    private TasteMakers member;
    private GridView feedGridView;
    private String user;
    private ArrayList<FeedItemsSetter> feedList = new ArrayList<FeedItemsSetter>();
    protected String names;
    private UiLifecycleHelper uiHelper;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        super.onCreateView(inflater, container, savedInstanceState);
        v = inflater.inflate(R.layout.offers_view, null, false);

        SharedPreferences preferences = getActivity().getSharedPreferences(
                "USERINFO", Context.MODE_PRIVATE);
        user = preferences.getString("name", null);

        feedGridView = (GridView) v.findViewById(R.id.feedGridView);
        gridView = (GridView) v.findViewById(R.id.gridView);
        TasteMakersListView = (ListView) v
                .findViewById(R.id.RecomendedUsersList);

        feedGridView.setFocusable(false);
        gridView.setFocusable(false);
        TasteMakersListView.setFocusable(false);

...


    @Override
    public void onSharePressed(String values) {
        System.out.println("Share button pressed!" + values);

    }

    ...

Logcat:

12-12 20:30:54.926: E/AndroidRuntime(9647): FATAL EXCEPTION: main
12-12 20:30:54.926: E/AndroidRuntime(9647): Process: com.fideli, PID: 9647
12-12 20:30:54.926: E/AndroidRuntime(9647): java.lang.NullPointerException
12-12 20:30:54.926: E/AndroidRuntime(9647):     at com.fideli.userimages.FeedGridViewAdapter$2.onClick(FeedGridViewAdapter.java:111)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.view.View.performClick(View.java:4654)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.view.View$PerformClick.run(View.java:19438)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.os.Handler.handleCallback(Handler.java:733)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.os.Handler.dispatchMessage(Handler.java:95)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.os.Looper.loop(Looper.java:146)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at android.app.ActivityThread.main(ActivityThread.java:5602)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at java.lang.reflect.Method.invokeNative(Native Method)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at java.lang.reflect.Method.invoke(Method.java:515)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
12-12 20:30:54.926: E/AndroidRuntime(9647):     at dalvik.system.NativeStart.main(Native Method)

您將得到一個NPE,這似乎表明您的mListener變量為null。 您實際上是否從“活動”中設置了偵聽器?

另外,您的ArrayAdapter類具有一個Context,如果您是從Activity類中創建的,則可能是一個Activity,為什么不使用它並將其傳遞給共享對話框呢? 如果您只有一個片段,則共享對話框也可以包含一個片段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM