卡片视图上的Android按钮,点击卡片视图的位置

时间:2015-02-07 05:45:02

标签: android android-listview android-cardview recycler-adapter

我有卡片视图,每张卡片上都有一个按钮。当用户点击按钮时,我试图获取持有按钮的卡的位置。

我有一个从RecyclerView.Adapter扩展的适配器,并实现以下方法......

public void onBindViewHolder(MovieImageViewHolder movieImageViewHolder, int i) {
    Movie movieItem = mMovieList.get(i);

    movieImageViewHolder.details.setTag(i);
    movieImageViewHolder.details.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            position = (Integer) v.getTag();
        }
    });
}

这是成功的,当我按下卡1上的按钮,位置等于1,当我按下卡4上的按钮时,位置等于4.

问题是,如何从适配器中获取此值(位置)并返回到Activity中,以便我可以使用它?或者我甚至需要这样做?我试图创建一个新的意图,但不认为应该从适配器完成?

我尝试为变量位置创建一个getter,并使用

调用主按钮操作
 public void buttonClick(View view) {
    int position = adapter.getPosition();
    Log.d(TAG, "Button Clicked::- " + String.valueOf(position));
}

使用

android:onClick="buttonClick"

在XML中,但单击按钮时没有任何反应,我相信这是因为适配器中的O​​nClick方法被触发了?

编辑:

似乎我取得了一些进展。我确定可以在适配器中设置标签

movieImageViewHolder.btn_details.setTag(i);

然后使用.getTag();

在我的onClick方法中获取该标记

现在唯一的事情是第一个元素的标签似乎为零,然后第二个元素为零,然后从第三个元素的一个开始...这是什么原因?

1 个答案:

答案 0 :(得分:1)

这实际上非常简单,是人们面临的一个非常普遍的“问题”。我设置了一条路径,我无法从适配器创建一个活动,其实际上就是我应该尝试做的事情。

 movieImageViewHolder.details.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            Integer taggedPosition = (Integer) v.getTag();
            Intent intent = new Intent(mContext, ViewMovieDetailsActivity.class);
            intent.putExtra(SearchMovie.MOVIE_TRANSFER, getMovie(taggedPosition));
            v.getContext().startActivity(intent);
        }

    });

正确开始正确的活动。