Итак, я экспериментирую с реализацией шаблона MVC в Android, где мои представления подклассы из RelativeLayout, LinearLayout, ScrollView и т. Д. Он работает, пока я не попытаюсь получить представление в моем представлении. Я получаю NPE. Я попытался получить доступ к представлению, чтобы установить onClickListener в конструкторе, а также в onAttachedToWindow(), но я получаю 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);
...
Спасибо за ваше предложение. Я попытался поместить setOnClickListener() в onAttachedToWindow(), но я все еще получаю NPE. Любые другие предложения? Я добавил свой код активности выше. –