![](/img/trans.png)
[英]Defining a RecyclerView's onCLickListener in an Activity outside the adapter class
[英]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.