2013-02-05 93 views
2

我在Android應用程序中有2個片段的活動。 在第一個片段上,我放了一個按鈕(btnA)。 第二次我推出了一個TextView(txtB)。Android片段互動

如何通過按下第一個活動上的按鈕來在第二個片段的TextView中設置文本?

THX,我是新來的Android應用程序開發

JoskXP

+0

這裏瞭解片段http://marakana.com/s/post/1250/android_fragments_tutorial –

+1

http://developer.android.com/training/basics/fragments/communicating.html –

+0

閱讀那裏,示例文章是前實際上你問的是什麼! [在Android中使用片段 - 教程](http://www.vogella.com/articles/AndroidFragments/article.html) – Megamind

回答

2

那麼你可以做這樣的事情:

在您的活動,提供公共鏈接到這兩個片段:

public FragmentNumberOne getFragmentOne() { 
    return fragOne; 
} 

public FragmentNumberTwo getFragmentTwo() { 
    return fragTwo; 
} 

然後提供存取到TextViewFragment類片段之一:

public TextView getTextView() { 
    return mTextView; 
} 

,並在原始Fragment那麼你可以使用:

((MyActivity)getActivity()).getFragmentOne().getTextView().setText("Hello"); 
+0

您應該閱讀http://developer.android.com/training/basics/fragments/communicating.html – AMerle

+1

這只是典型的Android團隊試圖讓事情變得比需要的更復雜:P上面的例子的工作方式完全相同,但您可以一目瞭然地閱讀它的內容。 – Graeme

+0

它可能稍微複雜一些,但是用FragmentNumberOne與FragmentNumberTwo緊密結合的方法。你不能使用其他的 – nicopico

2

繼Android的最佳實踐描述here

這比Graeme的解決方案略爲冗長,但允許重複使用您的片段。 (你可以在另一個屏幕使用FragmentWithButton,按鈕可以做不同的事情)

你有兩個片段(FragmentWithButtonFragmentWithText)和一個活動(MyActivity

  1. 創建接口FragmentWithButtonHostFragmentWithButton

    public class FragmentWithButton extends Fragment { 
    
        FragmentWithButtonHost host; 
    
        public interface FragmentWithButtonHost{ 
         public void onMyButtonClicked(View v); 
        } 
    
        @Override 
        public void onAttach(Activity activity) { 
         super.onAttach(activity); 
    
         try { 
          host = (FragmentWithButtonHost) activity; 
         } 
         catch (ClassCastException e) { 
          // TODO Handle exception 
         } 
        } 
    
        /** 
        * Click handler for MyButton 
        */ 
        public void onMyButtonClick(View v) { 
         host.onMyButtonClicked(v); 
        } 
    } 
    
  2. 創建FragmentWithText公共方法設置從該活動的文字:

    public class FragmentWithText extends Fragment{ 
    
         ... 
    
         public void setText(String text) { 
          // Set text displayed on the fragment 
         } 
    } 
    
  3. 確保您的活動實現了FragmentWithButtonHost接口,並調用setText方法:

    public MyActivity implements FragmentWithButtonHost { 
    
        ... 
    
        @Override 
        public void onMyButtonClicked(View v) { 
         getFragmentWithText().setText("TEST"); 
        } 
    
        public FragmentWithText getFragmentWithText() { 
         // Helper method to get current instance of FragmentWithText, 
         // or create a new one if there isn't any 
        } 
    }