Reputation: 25
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
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);
}
}
Upvotes: 0
Views: 73
Reputation: 60923
Quick and simple way (to very good to reuse) is define 1 more function in your Activity
and call it from your 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
Upvotes: 1
Reputation: 2506
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. 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
}
});
}
}
Upvotes: 3