0

Here - аналогичный вопрос, но предполагает использование PreferenceActivity.Как сделать предпочтение длинным кликом в PreferenceFragment?

Тем не менее, как сделать предпочтительным долгосрочное нажатие, если нет PreferenceActivity, например, при использовании PreferenceFragment?

PreferenceFragment не содержит ссылки на ListView (getListView() скрыт от API), поэтому такой же подход невозможен.

ответ

0

Это решение является немного рискованным, потому что оно делает предположения о суперкласс PreferenceFragment (используя ListView и используя android.R.id.list id).

Я попробовал другой подход установки OnLongClickListener в представлении Pref, но это сделало флажок незаметным, и я не смог найти способ исправить это. Так что это лучшее решение, которое я имею до сих пор.

public class MyPreferenceFragment extends PreferenceFragment implements OnItemLongClickListener { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity()); 
     setPreferenceScreen(root); 

     CheckBoxPreference pref = new LongClickableCheckBoxPreference(getActivity()) { 
      @Override 
      public boolean onLongClick(View v) { 
       // YAY! you long-clicked me :) 
       return true; 
      } 
     }; 
     // configure the pref here 
     root.addPreference(pref); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View result = super.onCreateView(inflater, container, savedInstanceState); 
     if (result != null) { 
      View lv = result.findViewById (android.R.id.list); 
      if (lv instanceof ListView) { 
       ((ListView)lv).setOnItemLongClickListener(this); 
      } 
      else { 
       // oh noes! it looks like this PreferenceFragment does not use the standard id for listviews 
      } 
     } 
     return result; 
    } 

    private static abstract class LongClickableCheckBoxPreference extends CheckBoxPreference implements View.OnLongClickListener { 
     public LongClickableCheckBoxPreference(Context context) { 
      super(context); 
     } 
    } 
} 
Смежные вопросы