[英]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.