从另一个 Class 更改 Object
Change Object From Another Class
我有一个 class 而不是 Activity 和一个 Activity。
我有一个 onClick 方法,我想从这个 onClick 方法传递一个 Object 到 Activity。
因为这个,我不能使用 PutExtra:
主要Activity、收藏夹、YtAdapter
我正在从 MainActivity 打开 Favroties class,但需要从 YtAdapter 发送到收藏夹。
希望这是可以理解的。
Yt 适配器:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder mHolder;
if(convertView != null){
mHolder = (ViewHolder)convertView.getTag();
}else{
mHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
convertView.setTag(mHolder);
}
//Setting the data
final SearchResult result = mVideoList.get(position);
mHolder.mVideoTitle.setText(result.getSnippet().getTitle());
//Loading the image
Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);
//OnClickListeners
mHolder.mVideoFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//////////////////////////////////////////////////////////////
// Need to send SearchResult result from here to favorites //
////////////////////////////////////////////////////////////
AppUtils.showToast(result.getSnippet().getTitle() + " Was added to favorites.");
}
});
mHolder.mVideoThumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppUtils.showToast("Please click on title to start video");
}
});
return convertView;
}
创建 YtAdapter:
@Override
public void completedRequest(Object... objects){
//Dismiss the dialog
if(mLoadingDialog != null && mLoadingDialog.isShowing())
mLoadingDialog.dismiss();
//Parse the response based on type of request
Integer reqCode = (Integer) objects[0];
if(reqCode == null || reqCode == 0)
throw new NullPointerException("Request Code's value is Invalid.");
switch (reqCode){
case SEARCH_VIDEO:
if(mYtadapter == null){
mYtadapter = new YtAdapter(this);
mYtadapter.setmVideoList((List<SearchResult>)objects[1]);
mVideoLsv.setAdapter(mYtadapter);
}else{
mYtadapter.setmVideoList((List<SearchResult>) objects[1]);
mYtadapter.notifyDataSetChanged();
}
break;
}
}
您可以将 activity 的引用传递给 YtAdapter,这样您就可以访问 activity class.[=13= 中包含的 public 方法]
编辑:
您有行 mYtadapter = new YtAdapter(this);
。如果 this
不是您要引用的 activity,您可以更改 YtAdapter class 的构造函数以包含 activity。例如:
public YtAdapter(Activity myActivity) { ... }
您应该阅读面向对象的基础知识
在 YtAdapter 构造函数中,您正在传递 Activity 上下文并将其用作 YtAdapter 中的 mActivity。
如果您的 SearchResult 是 Parcelable(或 Serializable),您可以,
public void onClick(View v) {
Intent i=new Intent(mActivity, Favorites.class);
i.putExtra("searchresult", result);
mActivity.startActivity(i);
}
并且在收藏夹中,您可以使用 getIntent().getParcelableExtra("searchresult") 或 getIntent().getSerializableExtra("searchresult") 来获取您的 SearchResult object.
如果您在这里寻找其他东西,请告诉我!
我有一个 class 而不是 Activity 和一个 Activity。 我有一个 onClick 方法,我想从这个 onClick 方法传递一个 Object 到 Activity。 因为这个,我不能使用 PutExtra: 主要Activity、收藏夹、YtAdapter
我正在从 MainActivity 打开 Favroties class,但需要从 YtAdapter 发送到收藏夹。 希望这是可以理解的。
Yt 适配器:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolder mHolder;
if(convertView != null){
mHolder = (ViewHolder)convertView.getTag();
}else{
mHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.view_video_item,null);
mHolder.mVideoThumbnail = (ImageView)convertView.findViewById(R.id.video_thumbnail);
mHolder.mVideoTitle = (TextView)convertView.findViewById(R.id.video_title);
mHolder.mVideoFavorite = (ImageView)convertView.findViewById(R.id.video_favorite);
convertView.setTag(mHolder);
}
//Setting the data
final SearchResult result = mVideoList.get(position);
mHolder.mVideoTitle.setText(result.getSnippet().getTitle());
//Loading the image
Picasso.with(mActivity).load(result.getSnippet().getThumbnails().getMedium().getUrl()).into(mHolder.mVideoThumbnail);
//OnClickListeners
mHolder.mVideoFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//////////////////////////////////////////////////////////////
// Need to send SearchResult result from here to favorites //
////////////////////////////////////////////////////////////
AppUtils.showToast(result.getSnippet().getTitle() + " Was added to favorites.");
}
});
mHolder.mVideoThumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AppUtils.showToast("Please click on title to start video");
}
});
return convertView;
}
创建 YtAdapter:
@Override
public void completedRequest(Object... objects){
//Dismiss the dialog
if(mLoadingDialog != null && mLoadingDialog.isShowing())
mLoadingDialog.dismiss();
//Parse the response based on type of request
Integer reqCode = (Integer) objects[0];
if(reqCode == null || reqCode == 0)
throw new NullPointerException("Request Code's value is Invalid.");
switch (reqCode){
case SEARCH_VIDEO:
if(mYtadapter == null){
mYtadapter = new YtAdapter(this);
mYtadapter.setmVideoList((List<SearchResult>)objects[1]);
mVideoLsv.setAdapter(mYtadapter);
}else{
mYtadapter.setmVideoList((List<SearchResult>) objects[1]);
mYtadapter.notifyDataSetChanged();
}
break;
}
}
您可以将 activity 的引用传递给 YtAdapter,这样您就可以访问 activity class.[=13= 中包含的 public 方法]
编辑:
您有行 mYtadapter = new YtAdapter(this);
。如果 this
不是您要引用的 activity,您可以更改 YtAdapter class 的构造函数以包含 activity。例如:
public YtAdapter(Activity myActivity) { ... }
您应该阅读面向对象的基础知识
在 YtAdapter 构造函数中,您正在传递 Activity 上下文并将其用作 YtAdapter 中的 mActivity。
如果您的 SearchResult 是 Parcelable(或 Serializable),您可以,
public void onClick(View v) {
Intent i=new Intent(mActivity, Favorites.class);
i.putExtra("searchresult", result);
mActivity.startActivity(i);
}
并且在收藏夹中,您可以使用 getIntent().getParcelableExtra("searchresult") 或 getIntent().getSerializableExtra("searchresult") 来获取您的 SearchResult object.
如果您在这里寻找其他东西,请告诉我!