2015-04-25 51 views
0

我試圖在三種情況下更改片段活動中的TextView,但我無法更改TextView。
有沒有解決方案可以在自己的Fragment_Activity或Main_Activity中更改Fragment的TextView?在MainActivity如何用自己的java類改變片段textview?

Fragment.java

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 


     TextView textView = (TextView) getView().findViewById(R.id.textView1); 
     textView.setText("Done!"); 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_blank_fragment2, container, false); 
     TextView tv = (TextView) view.findViewById(R.id.textView1); 
     tv.setText("Done!"); 
     return view; 
    } 

    @Override 
    public void onActivityCreated (Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     TextView tv = (TextView) getView().findViewById(R.id.textView1); 
     tv.setText("Done!"); 
    } 

fragment.xml之

... 
<TextView 
     android:textColor="@color/myBlack" 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="test" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     /> 
.... 

呼籲片段類觀點:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_weixin); 

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     instance = this; 

... 

View view2 = mLi.inflate(R.layout.fragment_blank_fragment2, null); 
      views.add(view2); 
... 
} 
+0

但如果你是在MainActivity添加片段,或者是靜態的分段。 – Bharatesh

+0

我被創建了靜態片段並添加到MainActicvity的LinearLayout中 [鏈接](http:\\ yekvip.com \ MyApp940205.zip) – user1794863

回答

0

是要知道

  1. 在片段getView()的onCreate返回null,因爲尚未創建視圖。
  2. 在片段中創建一個方法,使用片段實例從活動中設置TextView的值。

例子: 片段

public class Fragment1 extends Fragment { 


    TextView tv; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_blank_fragment2, container, false); 
     tv = (TextView) view.findViewById(R.id.textView1); 
     tv.setText("Done!"); 
     return view; 

    } 

    public void setViewText(String text){ 
     tv.setText(text); 
    } 
} 

活動

public class MyActivity extends FragmentActivity { 

    Fragment1 fragment1; 

    @Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
     setContentView(R.layout.activity_fragment); 
     //as you are using static fragment so create fragment instance using findFragmentById(id) 
     fragment1 = (Fragment1) getSupportFragmentManager().findFragmentById(R.id.fragment1); 

     fragment1.setViewText("Message"); 

    } 
} 

訪問官方文檔Communicating with Other Fragments
Happy_Coding :)

0

因爲我們不能看到整個fragment.xml之文件或你的主要活動的XML我不能確定問題是什麼,但似乎你可能沒有規範在Fragment.xml文件中創建片段類,這樣就不會調用oncreate。我建議你在main_weixin XML添加片段屬性,您刪除view2通脹的主要活動,那麼你可以簡單地在你的main_weixin.xml補充一點:

<fragment 
    android:name="your_package_name.Fragment" 
    android:id="@+id/fragment_id" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
+0

我試了一下,但什麼都沒有。可以看看示例嗎? [鏈接](http:\\ yekvip.com \ MyApp940205.zip)這需要我10天:l – user1794863

+0

您可以請發佈完整的XML代碼和Java代碼,所以我們可以幫助 – Maro

+0

[鏈接](http:\\ yekvip。 COM \ MyApp940205.zip) 「BlankFragment2」是我的片段, 「main_weixin」是我mainActivity 和所有我想學習和做的是當運行應用程序,並單擊「蒙娜麗莎」選項卡,將「TextView的文本「 – user1794863

相關問題