在Android中从Recycler adapther调用Activity方法的正确方法?

时间:2016-03-14 05:02:01

标签: java android android-recyclerview recycler-adapter

我需要从onBindViewHolder适配器的recycler调用Intent,来自ViewHolder中某个视图的点击事件。我无法直接这样做..

    public void onBindViewHolder(MyAdapter.MyViewHolder viewHolder, int i) {
        viewHolder.button.setonClickListener(new View.onClickListener(
               @Override
               onClick(View v) {
               Intent i=new Intent();
                i.setAction("Intent.ACTION_CALL");
                i.setData(Uri.parse("tel:1234567890"));
                startActivity(i);
            }
        ));
}

这不起作用。它一直在抛出错误。然后我在Activity中使用相同的代码创建了一个公共方法。在适配器构造函数中传递了Activity上下文。然后从按钮单击事件调用方法如下。

((MyActivity)context).makePhoneCall("1234567890");

这就是诀窍。但我觉得应该有一个更好的方法来做到这一点。 由于我主要来自C背景,我不确定。 因此,根据Java编程惯例,我的问题是有更好或更合适的方法。

3 个答案:

答案 0 :(得分:1)

如果您需要通过Intent调用其他活动,则可以使用任何视图<div id="grid"></div> <script> $("#grid").kendoGrid({ columns: [ { hidden: true, field: "id" }, { field: "name" } ], dataSource: [ { id: 1, name: "Jane Doe" }, { id: 2, name: "John Doe" } ] }); </script>

Context

我认为这是一种正确的方法。

答案 1 :(得分:1)

另一种方法是在recycleradapter中实现一个监听器并在活动中监听它。

所以在适配器中:

public class RecyclerAdapter .... {    

    private MyClickListener listener;


    public void onBindViewHolder(MyAdapter.MyViewHolder viewHolder, int i) {
        viewHolder.button.setonClickListener(new View.onClickListener(
               @Override
               onClick(View v) {
                  listener.onClicked(true);
            }
        ));

    public void setMyClickListener(MyClickListener listener) {
        this.listener = listener;
    }

}

//创建MyClickListener.class

public interface MyClickListener {

               public void onClicked(boolean status);
        }

在您的活动中:

public class MainActivity ... implements MyClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {


adapter.setMyClickListener(this);

}

@Override
onClick(boolean status) {
      if (status){
            Intent i=new Intent();
            i.setAction("Intent.ACTION_CALL");
            i.setData(Uri.parse("tel:1234567890"));
            startActivity(i);
      };
}

}

答案 2 :(得分:0)

试试这个 在适配器中:

 Activity mContext;

public FollowersAdapter(Activity mContext) {
    this.mContext = mContext;
}

//然后点击onBindViewHolder

  holder.linear_user.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            System.out.println("linear click>>>>>>>>>>>>");

            Intent ToImage = new Intent(mContext, UserData.class);
            ToImage.putExtra("user_id", data.get(position).getFollower_id());
            mContext.startActivity(ToImage);

        }
    });