2

私はAndroidに比較的慣れていないので、カスタムビューでプログラムで定義された相対レイアウト(フラグメントで定義)にアクセスする方法に完全に固執しています。

フラグメントでは、これは私が持っているものです:

...
    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment1, container,false);
    RelativeLayout rl1 = new RelativeLayout(view.getContext());
    TextView tView1 = new TextView(view.getContext()); 
    tView1.setText("test");
    rl1.addView(tView1); 
    rl1.setId(1);
    tView1.setId(2);
...
}

次に、カスタムビューで、IDによって相対レイアウトとTextViewを呼び出します。何かをしようとすると、NullPointer例外が発生します。

...
RelativeLayout rl1 = (RelativeLayout) findViewById(1);
TextView tView1 = (TextView) findViewById(2);
tView1.getText();

上記のコードは.getText()、TextViewを試してみることを示していますが、RelativeLayoutに対して実行すると、NullPointer例外も発生します。

つまり、基本的に、RelativeLayoutとTextViewsが正しく見つからないようです。参考までに、私はすでにこの同様の質問を見ましたが、ここでは当てはまりませんでした。私のコンストラクターはすでに適切に設定されています。

4

2 に答える 2

1

相対レイアウトをレイアウトグループに追加する必要があります...そして、レイアウトの親ビューから、相対レイアウトとその子にアクセスできます。

于 2013-02-16T19:12:46.987 に答える
1

レイアウトをメインビューに追加する必要がありますが、最初にレイアウトにキャストする必要があります。

YourLayout view = (YourLayout) inflater.inflate(R.layout.fragment1, container,false);
RelativeLayout rl1 = new RelativeLayout(view.getContext());
TextView tView1 = new TextView(view.getContext()); 
tView1.setText("test");
rl1.addView(tView1); 
rl1.setId(1);
tView1.setId(2);
view.addView (rl1);//add rl1 to the main View

onCreateView() 次に、外部で作業し ていて、すでに呼び出されている場合は、アクセスします。onCreateView()

RelativeLayout rl1 = (RelativeLayout) getView().findViewById(1);
TextView tView1 = (TextView) rl1.findViewById(2);
tView1.getText();

のビューにまだアクセスしようとしている場合はonCreateView()findViewById()関係ありません。ビューの参照はすでにあるので、それらを使用してください。

またonCreateView()、UIを更新するためにリスナーなどを追加することもできるので、少し簡単にできるかもしれません。

于 2013-02-16T19:19:11.383 に答える