2016-11-22 9 views
0

内の変数の操作:は、以下の破片クラスに断片クラス

public class TestFrag extends Fragment { 

    public TextView tViewA; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.mainmenu, container, false); 
     tViewA = (TextView)view.findViewById(R.id.texta); 
    return view; 
    } 

    public void setTViewText(String textToSet){ 
     tViewA.setText(textToSet); 
    } 
} 

とMainActivityクラス:setTViewTextテキストを呼び出すとき

public class MainActivity extends FragmentActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 


    public void doStuff(View view){ 
     TestFrag myf = new TestFrag(); 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.add(R.id.container, myf); 
     transaction.commit(); 

     myf.setTViewText("test"); 
    } 
} 

アプリは、nullポインタ例外を与えるクラッシュします。 TextViewには、XML

<TextView 
    android:text="Change Me" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginStart="24dp" 
    android:layout_marginTop="19dp" 
    android:id="@+id/texta" /> 

で宣言されている

私は今、しばらくの間、これを理解しようとしてきました。フラグメントクラスの変数を宣言して操作する正しい方法は何ですか?

答えて

1

問題は、フラグメントにまだレンダリングされていないtextViewに文字列を設定しようとしていることです。したがって、あなたのsetTViewText()はonCreateView()の前に呼び出されます。システムがonCreateView()メソッドを呼び出した後でなければ、setTViewText()を呼び出すことはできません。このメソッドはtextViewへの参照をtViewAに割り当てます。

値をフラグメントに渡すには、setArgument()メソッドを使用する必要があります。

TestFrag myf = new TestFrag(); 
Bundle args = new Bundle(); 
args.putString("arg_text", your_string); 
myf.setArgument(args); 
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.container, myf); 
transaction.commit(); 

は、フラグメントのonCreateView内には、取得エラー「メソッドを解決できない」、args.putで

String yourString = getArgument().getString("arg_text"); 
tv.setText(yourString); 
+0

持つ問題によって、この値にアクセスすることができます。 putStringを使用するはずですか? –

+0

はい。 args.putString()。 –