从另一个 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.

如果您在这里寻找其他东西,请告诉我!