簡體   English   中英

如何將Recyclerview的OnClickListener放入Activity

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

RecyclerViewAdapter在片段中。我能夠在片段中調用OnItemClickListener,但問題是我在Ativity中需要它

我試圖再次調用接口,但沒有結果(空)

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

在活動和片段之間創建接口。 創建界面使您的片段可重復使用,並易於將其放入其他活動中。

在活動片段上添加偵聽器,以偵聽來自recyclerview的任何單擊。 下面的例子:

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

活動:

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

快速簡便的方法(很好地重用)是在Activity定義另外1個函數,然后從Fragment調用它。

class YourFragment {

       ...

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


class YouActivity {

      void onItemClickInYourFragment(){
          // do something
      }
}

重用時不是很好,因為當您想在許多活動中重用該片段時,需要進行一些檢查,例如

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

因此,如果您想重用解決方案,最好使用@Tenten Ponce解決方案之類的界面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM