0

以下に示すカスタム レイアウトがあり、そのレイアウト ファイル内から TextViews テキストを更新したいと考えています。しかし、TextView はレイアウト ファイル内にまったくありません。

申し訳ありませんが、実装しているものを適切に説明する方法がわかりません。誰かが正しい用語についてアドバイスすることさえできれば、それは大歓迎です。

基本的には、com.grogorian.android.control.MinutePicker から膨らませたボタンをクリックしたときに、TextView を AM から PM に変更したいと考えています。com.grogorian.android.control.MinutePicker 内で以下の Java を使用していますが、null ポインターを取得し続けます

<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" />

ジャバはこちら

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

編集:ここからのコードです

    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 );
4

1 に答える 1

0

私が推測すると、今、OnCLickListenerリスナーで、投稿したレイアウト ファイルからLinearLayout Lを見つけようとしています (これはおそらく ?! のレイアウトとして使用します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私は上記のコードをテストしていません (まあ、あなたのコードがどのように構築されているかさえわかりません)。これが問題でない場合は、取得する可能性のある完全な例外スタック トレースを追加することをお勧めします。

于 2012-05-06T13:31:05.527 に答える