2015-10-17 2 views
1

Я создал предпочтения, который имеет пользовательский макет ImageView, который является чем-то вроде этого:Получение ссылки на заказ макет в PreferenceFragmentCompat

<Preference 
     android:key="profile_picture_preference" 
     android:layout="@layout/layout_profile_picture"></Preference> 

Моя раскладка такова:

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/profileImageView" 
    android:layout_width="75dp" 
    android:layout_height="75dp" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="10dp" 
    android:layout_marginTop="10dp" 
    android:background="#ABCDEF" /> 

Но я не знаю, как можно получить ссылку на него. Я попытался получить его внутри метода onCreateView, выполнив следующие действия:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = super.onCreateView(inflater, container, savedInstanceState); 

    ImageView imageView = (ImageView) view.findViewById(R.id.profileImageView); 

    return view; 
} 

Но ImageView не имеет значения.

Благодарим за помощь.

ответ

0

Я не нашел никакого официального способа. Так мне удалось вот так:

@Override 
public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { 

    recyclerView = super.onCreateRecyclerView(inflater, parent, savedInstanceState); 
    recyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() { 
     @Override 
     public void onChildViewAttachedToWindow(View view) { 
      if (view.getId() == R.id.profileImageView) { 
       profileImageView = (ImageView) view; 
      } 
     } 
     @Override 
     public void onChildViewDetachedFromWindow(View view) { 
     } 
    }); 
    return recyclerView; 
} 
+0

Это не работает для меня, onChildViewAttachedToWindow не вызывается для зрения раздуто с 'layout' парами преференций –

1

Вы можете указать собственный макет в своей теме. Там вы можете добавить свой ImageView

Например:

styles.xml

<style name="YourTheme" parent="Theme.AppCompat"> 
    <!-- ... --> 
    <item name="preferenceTheme">@style/YourTheme.PreferenceThemeOverlay</item> 
</style> 

<style name="YourTheme.PreferenceThemeOverlay" parent="@style/PreferenceThemeOverlay"> 
    <item name="android:layout">@layout/fragment_your_preferences</item> 
</style> 

fragment_your_preferences.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/profileImageView" 
     android:layout_width="75dp" 
     android:layout_height="75dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:layout_marginBottom="10dp" 
     android:layout_marginTop="10dp" 
     android:background="#ABCDEF" /> 

    <!-- Required ViewGroup for PreferenceFragmentCompat --> 
    <FrameLayout 
     android:id="@+id/list_container" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    </FrameLayout> 

</LinearLayout> 

, а затем в onViewCreated() вашего класса фрагмента вы может начать использовать ImageView:

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) 
{ 
    super.onViewCreated(view, savedInstanceState); 

    ImageView image_view = (ImageView)view.findViewById(R.id.profileImageView); 

    if (image_view != null) 
    { 
     // Your code 
    } 
} 
Смежные вопросы