0

どこにでも追加できる「タイマー」であるフラグメントがあります。フラグメントでは、textViewをプログラムで変更し、美しく実行されます。私の問題は、その下の別のメソッドでコンストラクター(?それが正しい用語かどうかわからない)によって膨らんだレイアウトからのビューを使用する場合です。

public class Timer_fragment extends android.support.v4.app.Fragment {
    int testpins;
    String testedpin;
    TextView text;  
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.timer_frag, container, false);

    TextView text = (TextView) v.findViewById(R.id.pwd_status);
    text.setText("Setting text in fragment not main");
    /* set the TextView's text, click listeners, etc. */
    updateStatus();
    return v;
}

そのコードはすべてエラーなしで機能しますが、このメソッドを追加しようとすると、次のようになります。

private void updateStatus() {
            TextView text = (TextView) findViewById(R.id.pwd_status);
            testPin();

            text.setText(testedpin);                         
        }

findViewByIdの下に赤い線が表示されますThe method findViewById(int) is undefined for the type Timer_fragment

すべてのメソッドでビューを膨らませて返さないことを考えましたが、それは確かにパフォーマンスに何らかの影響を与えるでしょうか?

ビューを使用する前にレイアウトを膨らませようとしましたが、単語にエラーがあり、解決できないinflaterと言っています。container

私はこれについて正しく行っていますか?

4

3 に答える 3

4

Fragment のスコープ内に というメンバー変数が既にありますtext。メソッドで再宣言しないでください。割り当てるだけです。

text = (TextView) v.findViewById(R.id.pwd_status);

private void upateStatus() {
        testPin();
        text.setText(testedpin);                         
    }
于 2012-07-30T13:34:16.683 に答える
1

メソッド「findViewById」は、アクティビティによって提供されます。このクラスは Fragment を拡張しますが、フラグメントにアクティビティを提供しない限り、アクティビティ関連のメソッド呼び出しにはアクセスできません。チェックアウト: http://developer.android.com/reference/android/app/Activity.html#findViewById(int )

基本的に、アクティビティのインスタンスを Timer_fragment に渡します。

private final Activity _activity;

Timer_fragment(Activity activity)
{
    _activity = activity;
}
...

private void updateStatus()
{
    TextView text = (TextView) _activity.findViewById(R.id.pwd_status);
    testPin();

    text.setText(testedpin);                         
} 

または、タイマー クラス内からではなく、使用されているアクティビティ内からビューのテキストを設定します。

于 2012-07-30T13:32:11.533 に答える
0

findViewByIdに置き換えるだけgetActivity().findViewByIdです。

findViewById メソッドは、Activity クラス内で定義されています。フラグメントはアクティビティではありません。ただし、フラグメントはメソッド getActivity を使用して画面に追加したアクティビティへの参照を取得できます。

于 2013-10-02T08:58:04.147 に答える