简体   繁体   English

如何将Recyclerview的OnClickListener放入Activity

[英]How to put Recyclerview's OnClickListener in Activity

The RecyclerViewAdapter is in the fragment.I was able to call the OnItemClickListener in Fragment but the problem is that I need it in Ativity RecyclerViewAdapter在片段中。我能够在片段中调用OnItemClickListener,但问题是我在Ativity中需要它

I tried to call interface again but no result (null) 我试图再次调用接口,但没有结果(空)

  public class SongsFragment extends Fragment implements ARecyclerViewAdapter.OnItemClickListener
{
    OnHeadlineSelectedListener callback;

    @Override
    public void onItemClick(int position)
    {
        // TODO: Implement this method
        String TAG = "AAA";
        Log.e(TAG, "lol" + position);
    }

    View v;
    private RecyclerView myrecyclerView;
    private List<AudioModel> listSong;

    DatabaseHelper myDB;

    public SongsFragment() {

    }

    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener callback) {
        this.callback = callback;
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // TODO: Implement this method
        v = inflater.inflate(R.layout.songs_fragment, container, false);

        myrecyclerView = (RecyclerView) v.findViewById(R.id.audio_recyclerview);
        ARecyclerViewAdapter adapter = new ARecyclerViewAdapter(getContext(),listSong);
        adapter.setOnItemClickListener(this);
        myrecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        myrecyclerView.setAdapter(adapter);
        return v;
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        // TODO: Implement this method
        super.onCreate(savedInstanceState);

        DatabaseHelper myDB = new DatabaseHelper(getActivity());
        listSong = new ArrayList<>();
        listSong.addAll(myDB.getAllSongs());

    }

    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }
}

Create interface between activity and fragment. 在活动和片段之间创建接口。 Creating interface makes your fragment reusable and easy to put it in another activities. 创建界面使您的片段可重复使用,并易于将其放入其他活动中。

Add the listener on the fragment from activity to listen to any clicks from the recyclerview. 在活动片段上添加侦听器,以侦听来自recyclerview的任何单击。 Example below: 下面的例子:

class SongsFragment {

  interface RecyclerViewClickListener {
    void onClick(int position); // you can pass any parameters here you need from recyclerview to activity
  }

  private RecyclerViewClickListener mListener;

  // set the listener here from activity
  public void setListener(RecyclerViewClickListener listener) {
    mListener = listener;
  }

  @Override
  public void onItemClick(int position) {
    // TODO: Implement this method
    String TAG = "AAA";
    Log.e(TAG, "lol" + position);
    mListener.onClick(position);
  }
}

Activity: 活动:

class YourActivity extends AppCompatActivity {
  // some codes
  private void setupFragment() {
    SongsFragment fragment = new SongsFragment();
    fragment.setListener(new RecyclerViewClickListener() {
      @Override
      void onClick(int position) {
        // do something on the object clicked from rv
      }
    });
  }
}

Quick and simple way (to very good to reuse) is define 1 more function in your Activity and call it from your Fragment . 快速简便的方法(很好地重用)是在Activity定义另外1个函数,然后从Fragment调用它。
Example

class YourFragment {

       ...

       @Override 
       public void onItemClick(){
          ((YourActivity) getActivity()).onItemClickInYourFragment()
       }
}


class YouActivity {

      void onItemClickInYourFragment(){
          // do something
      }
}

It is not good very good when reuse because when you want to reuse the fragment in many activity, you need some check like 重用时不是很好,因为当您想在许多活动中重用该片段时,需要进行一些检查,例如

if(getActivity() is YourActivity){
   // do something
} else if(getActivity() is OtherActivity){
  // do something
}

Therefore, if you want reuse solution, better to use interface like @Tenten Ponce solution 因此,如果您想重用解决方案,最好使用@Tenten Ponce解决方案之类的界面

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在适配器类外的 Activity 中定义 RecyclerView 的 onCLickListener - Defining a RecyclerView's onCLickListener in an Activity outside the adapter class 如何在RecyclerView上设置onClickListener? - How to set onClickListener on RecyclerView? RecyclerView onClickListener 显示错误 - RecyclerView onClickListener show's an error RecyclerView中CardView上的onClickListener,由Activity中的片段中的片段创建 - onClickListener on a CardView in a RecyclerView created by a Fragment in a Fragment in an Activity 如何在Fragments中设置RecyclerView OnClickListener? - How to set RecyclerView OnClickListener in Fragments? 如何从Activity为Fragment的开关设置OnClickListener? - How to set OnClickListener from Activity for Fragment's switch? 在哪里以及如何将 onclick 放入 recyclerview 以获取包含该片段的活动的结果? - where and how to put a onclick in recyclerview to get the result in the activity that contain the fragment? 从RecyclerView内的onClickListener开始活动后,出现NullPointerException - NullPointerException after starting activity from onClickListener inside RecyclerView 用Activity实现OnClickListener的效果如何? - What's the effect of implementing the OnClickListener with an Activity? setText()在另一个Activity的onClickListener上不起作用 - setText() not working from another Activity's onClickListener
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM