2013-04-03 2 views
1

그래서 안드로이드에서 내 뷰가 RelativeLayout, LinearLayout, ScrollView 등의 하위 클래스로 서브 클래 싱되는 MVC 패턴을 구현하고 있습니다. 내 뷰 내에서 뷰를 유지하려고 할 때까지 작동합니다. 나는 NPE를 얻는다. 생성자와 onAttachedToWindow()에서 onClickListener를 설정하기 위해 뷰에 액세스를 시도했지만 두 위치 모두에서 NPE를 얻습니다.MVC의 일부로 사용자 지정보기를 구현하는 방법은 무엇입니까?

예를 들어, 다음 뷰 클래스는 다음과 같습니다

public class ViewAchievements extends LinearLayout 
{ 
    private RelativeLayout mRelativeLayoutAchievement1; 

    public ViewAchievements(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 

     mRelativeLayoutAchievement1 = (RelativeLayout) findViewById(R.id.relativeLayout_achievement1); 
     mRelativeLayoutAchievement1.setOnClickListener((OnClickListener) context); //NPE on this line 
    } 

    @Override 
    protected void onAttachedToWindow() 
    { 
     super.onAttachedToWindow(); 

     mRelativeLayoutAchievement1.setOnClickListener(mOnClickListener); //Also get NPE on this line 
    } 
} 

사람이 경우 mRelativeLayoutAchievement1에, 나에게 내 파단의 보류를 얻을 수있는 적절한 방법을 알려 주시기 바랍니다 수 있습니까?

는 여기에 XML 조각입니다 :

<com.beachbody.p90x.achievements.ViewAchievements xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/gray_very_dark" 
    android:orientation="vertical" > 

    <!-- kv Row 1 --> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:orientation="horizontal" 
     android:layout_weight="1" 
     android:baselineAligned="false"> 

     <RelativeLayout 
      android:id="@+id/relativeLayout_achievement1" 
      style="@style/linearLayout_achievement" 
      android:layout_width="0dp" 
      android:layout_height="fill_parent" 
      android:layout_margin="@dimen/margin_sm" 
      android:layout_weight="1" > 

      <TextView 
       android:id="@+id/textView_achievement1" 
       style="@style/text_small_bold_gray" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:layout_centerHorizontal="true" 
       android:layout_marginBottom="@dimen/margin_large" 
       android:text="1/20" /> 
     </RelativeLayout> 
... 

그리고 여기 내 활동에서보기를 만드는거야 방법은 다음과 같습니다 당신은 뷰의 생성자 동안 아이 뷰를 얻기 위해 노력하고

public class ActivityAchievements extends ActivitySlidingMenu 
{ 
    private ViewAchievements mViewAchievements; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     mViewAchievements = (ViewAchievements) View.inflate(this, R.layout.view_achievements, null); 
     setContentView(mViewAchievements); 
... 

답변

관련 문제