从另一个类更改对象

时间:2015-05-11 17:23:57

标签: android android-intent

我有一个不是Activity和一个Activity的类。 我有一个onClick方法,我想从这个onClick方法传递一个Object到Activity。 因为这个,我无法使用PutExtra: MainActivity,收藏夹,YtAdapter

我是从MainActivity打开Favroties类,但需要从YtAdapter发送到收藏夹。 希望这是可以理解的。

YtAdapter:

    @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;
    }
}

2 个答案:

答案 0 :(得分:0)

您可以将活动的引用传递给YtAdapter,以便您可以访问活动类中包含的公共方法。

修改

您有mYtadapter = new YtAdapter(this);行。如果this不是您要引用的活动,则可以更改YtAdapter类的构造函数以包含活动。例如:

public YtAdapter(Activity myActivity) { ... }

您应该阅读面向对象的基础知识

答案 1 :(得分:0)

在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(&#34; searchresult&#34;)或getIntent()。getSerializableExtra(&#34; searchresult&#34;)来获取你的SearchResult对象。

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