2015-10-17 52 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' PARAM膨脹的觀點 –

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 
    } 
}