9

私は本当にこれにこだわっています。数量を増やし、数量に基づいて価格を更新する単純な textswitcher を実行しようとしています。現在、私のxmlには、数量を増やすためだけにTextSwitcher内にTextViewのようなものがあります。でテキストビューを取得しfindViewById(R.id.quantity)ます。

これは、増分量を設定するために見つけなければならないものです(私はViewFactoryを実装しています)

switcher = (TextSwitcher) findViewById(R.id.switcher);
switcher.setFactory(this);
quantity = (TextView) findViewById(R.id.quantity);

makeView() もオーバーライドしています

@Override
     public View makeView() {
        return quantity;
    }

また、インクリメント ボタンを押すと、カウンターがインクリメントされ、スイッチャーのテキストが現在のカウントに設定されます。このような:

switcher.setText(String.valueOf(currentQuantity));

誰かが私が間違っていることを教えてもらえますか?? この行でヌルポインターを取得し続けます。

switcher.setFactory(this);

XML スニペットは次のとおりです。

<TextSwitcher android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/switcher">
            <TextView android:text="TextView" android:id="@+id/quantity" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
        </TextSwitcher>
4

4 に答える 4

1

setContentViewTextSwitcher を探す前に電話したことを確認してください

于 2011-06-14T20:17:52.263 に答える
1

nullを返すfindViewByIdで同じ奇妙な問題が発生しました。数時間掘り下げた後、ようやく問題を突き止めることができました。それは私のコードの間違いです。同様の間違いを犯している可能性は十分にあります。

私のコードは(説明目的で、元のコードではありません):

public class MyTextSwitcher extends TextSwitcher {
public MyTextSwitcher(Context context, AttributeSet attrs) {
    super(context);
}

エラーはコンストラクター呼び出しにあります。コンストラクターのコードを次のように変更して、機能させる必要があります。

super(context, attrs); // note the extra attrs parameter

この間違い (および他のクラスでの同様の間違い) により、「新しく」定義されたすべてのリソースが から見えなくなる可能性がありますfindViewById

今日は2回も同じミスをしてしまった!

于 2011-11-16T10:26:59.180 に答える
1

うーん..興味深いことに、私はここで同じ問題を抱えていました。私の場合、2 つの問題がありました。まず、makeView から null を返していました。findViewById から参照を取得しているため、あなたのケースではないと思います(ただし、このメソッドが失敗して null 参照が返される場合があることに注意してください。そこにブレークポイントを配置し、null ポインターがないことを確認することをお勧めします)。

私が抱えていた2番目の問題(これもあなたのものかもしれないと思います)は、明らかにTextSwitcherが子ビューを持つことを期待していないため、TextViewをその中に入れるべきではありません。その TextView を削除してみて、機能するかどうかを確認してください。

于 2011-09-27T15:41:28.840 に答える