All the answers I found on SO like these above are now obsolete as they deal with preference screen based on ListView whereas AppCmpat and androidx use RecyclerView. In such case one can do the following:
1. Extend preference class
2. Override onBindViewHolder
3. define some interface for outer fragment/activity and invoke interface method in Holder.View.OnLongClickListener
private static class OrgPreference extends SwitchPreference
{
private final OnEntryClickListener mOnEntryClickListener;
public OrgPreference(Context context, OnEntryClickListener onEntryClickListener) {
super(context);
mOnEntryClickListener = onEntryClickListener;
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
holder.itemView.setOnLongClickListener(view -> {
String companyId = OrgPreference.this.getKey();
mOnEntryClickListener.onEntryLongClick(companyId);
return true;
});
}
}
In fragment/activity:
interface OnEntryClickListener {
void onEntryLongClick(String companyId);
}
...
OrgPreference switchPreference = new OrgPreference(getContext(), new OnEntryClickListener() {
@Override
public void onEntryLongClick(String companyId) {
//Do stuff
}
});