2012-05-06 2 views
0

У меня есть пользовательский макет, показанный ниже, и я хотел бы обновить текст TextViews из этого файла макета. Но TextView вообще не находится в файле макета.Пользовательский макет Взаимодействие с другими макетами TextView

Извините, я не знаю, как правильно описать, что я реализую. Если бы кто-нибудь мог даже посоветовать правильную терминологию, которая была бы высоко оценена.

В основном я хочу изменить TextView от AM до PM, когда нажата кнопка, которая завышена от com.grogorian.android.control.MinutePicker. Я использую ниже яву в com.grogorian.android.control.MinutePicker, но продолжаю получать нулевой указатель

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/L" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"> 
<com.grogorian.android.control.MinutePicker 
     android:id="@+id/Picker2" 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
    </com.grogorian.android.control.MinutePicker> 
    <TextView android:id="@+id/AMPMIdentifier" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="AM" /> 

Здесь на Java

LinearLayout L = (LinearLayout)findViewById(R.id.L); 
    TextView Identifier = (TextView)L.findViewById(R.id.AMPMIdentifier); 
    Identifier.setText("PM"); 

EDIT: Вот код от

but = new Button(context); 
    but.setTextSize(TEXT_SIZE); 
    but.setText("-"); 

    // Decrement once for a click 
    but.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
LinearLayout L = (LinearLayout)findViewById(R.id.L); 
    TextView Identifier = (TextView)L.findViewById(R.id.AMPMIdentifier); 
    Identifier.setText("PM"); 
     } 
    }); 
      this.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    LayoutParams elementParams = new LinearLayout.LayoutParams(ELEMENT_WIDTH, ELEMENT_HEIGHT); 

     addView(but, elementParams); 
+0

Не хватает информации. Покажите класс, в котором вы устанавливаете свой макет, а также com.grogorian.android.control.MinutePicker ..., который даст кому-то шанс на бой, чтобы помочь вам. – Barak

+0

Добавлен запрошенный код. Спасибо – Somk

+0

Я не вижу 'setContentView' там где угодно ... – Barak

ответ

0

Если бы я был догадаться, прямо сейчас вы пытаетесь найти в OnCLickListener слушатель, LinearLayoutL из файла макета, который вы опубликовали (который вы, вероятно, используете в качестве макета для Activity?!). Это не сработает, потому что LinearLayout не будет найден, и объект будет null. Если это то, что вы делаете, то попробуйте другой подход:

but.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     LinearLayout parent = (LinearLayout) v.getParent(); // I assumed your MinutePicker extends LinearLayout 
     LinearLayout L = (LinearLayout) parent.getParent(); 
     TextView Identifier = (TextView)L.findViewById(R.id.AMPMIdentifier); 
     Identifier.setText("PM"); 
    } 
}); 

Я не проверял выше код (ну, я даже не знаю, как именно ваш MinutePicker построен). Если это не проблема, вы можете захотеть добавить полное исключение stacktrace, которое вы можете получить.

+0

Спасибо, отлично работал – Somk

Смежные вопросы