Android получает представление о предпочтении в PreferenceActivity

Я хотел бы получить экземпляр View, который используется для отображения определенного Preference в моей PreferenceActivity, поэтому я могу изменить его свойства, например:

public class SettingsActivity extends PreferenceActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); Preference pref = findPreference("key"); pref.getView().setVisibility(View.GONE); //not necessarily setVisibility, i hope you get my point } } 

Я нашел этот метод только: getView (View convertView, родительская группа ViewGroup) . Но мне кажется сбивающим с толку, что, если я хочу получить представление о моих предпочтениях, мне нужно предоставить view и viewGroup в качестве параметров?

Может кто-нибудь объяснить, как использовать этот метод, или указать мне другой метод, чтобы получить представление из моего экземпляра Preference.

PS: если возможно, я предпочел бы НЕ расширять класс предпочтений, но я не возражаю, если это необходимо

Solutions Collecting From Web of "Android получает представление о предпочтении в PreferenceActivity"

Я не уверен, как получить представление для предпочтения, но если вы хотите удалить представление с экрана (установите видимость на View.gone), вы можете использовать следующее:

getPreferenceScreen (). removePreference (thePreference)

PreferenceActivity наследует класс ListActivity . ListActivity имеет метод getListView() который возвращает ListView, который отображает ваши предпочтения.

EDIT: Вот код в моем комментарии отформатирован:

 getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { // ... put listener code here }); 

Чтобы получить представление о желаемом предпочтении, вы можете использовать это:

 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); Preference preference=findPreference(“preferenceKey”); View preferenceView=getListView().getChildAt(preference.getOrder()); //Do your stuff } 

Примечание. Вы не можете сделать это в методе onCreate потому что это вызовет onCreate NullPointerException .