2016-11-22 92 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類:

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"); 
    } 
} 

當調用setTViewText文本應用程序將崩潰給一個空指針異常。

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()方法將值傳遞給fragment。

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()。 –