2016-05-10 18 views
-2

私はそれぞれのコードでの断片があります。私のMainActivityでボタンをクリックすると、フラグメント内のTextViewをどのように更新できますか?

public class Fragment1 extends Fragment { 

public static Fragment1 newInstance() { 
    Fragment1 fragment = new Fragment1(); 
    return fragment; 
} 

public Fragment1() { 
    // Deve existir um construtor vazio 
    // na classe que estende um Fragment 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.activity_fragment1, container, false); 
} 

public void changeText(){ 
    //this textview should be bound in the fragment onCreate as a member variable 
    TextView frv= (TextView) getView().findViewById(R.id.msgStatusPorta); 
    frv.setText("Porta Atualmente Aberta"); 

} 

を、私はこれを行う:

FragmentManager fm = getSupportFragmentManager(); //if you added fragment via layout xml 
Fragment1 fragment = (Fragment1)fm.findFragmentById(R.id.fragment1); 

とのonClickで

、私は私がしようと

fragment.changeText(view); 

を行いますChangeText()メソッドからTextviewを更新するボタンをクリックしてこのメ​​ソッドが呼び出されると、アプリケーションがクラッシュすることがありますか?

ありがとうございました。あなたのフラグメントで

private MyFrag fragment; //MyFrag is your fragmemt 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 
    fragment = (MyFrag) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 

    Button yourbutton = (Button) findViewById(R.id.yourbutton); 
    yourbutton.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View view){ 
      fragment.setEditText("Your Text"); 
     }); 

+0

それはchangeText(vを見る) –

+1

どこから 'changeText'が呼ばれましたか?ビューが存在することを保証するには、ビューがonViewCreatedまたはそれ以降にあることを確認する必要があります。 –

答えて

0

インターフェイスを使用すると簡単に行うことができます。あなたの活動で次のようなことをしてください。

public class YourActivity extends AppCompatActivity{ 
    FragmentCommunicator fragmentCommunicator; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       fragmentCommunicator.changeText("Hello"); 

      } 
     }); 

    } 

    public void passVal(FragmentCommunicator fragmentCommunicator) { 
     this.fragmentCommunicator = fragmentCommunicator; 

    } 

} 

public interface FragmentCommunicator { 
    public void changeText(String textVal); 
} 

あなたの断片でこれをしてください。

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    final View view = inflater.inflate(R.layout.activity_fragment1, container, false) 
    ((YourActivity) getActivity()).passVal(new FragmentCommunicator() { 
     @Override 
     public void changeText(String textVal) { 
       TextView frv = (TextView) view.findViewById(R.id.msgStatusPorta); 
       frv.setText(textVal); 
      } 
    }); 
    return view; 
} 
+0

ありがとう、それは非常によく目を覚ました。 –

+0

この回答がうまくいく場合は受け入れてください。 – Masum

0

は、あなたがこれを行うことができ、あなたがXML経由の断片を入れて持って

public void setEditText(String text){ 
    edittext.setText(text); 
} 
+0

あなたは指摘のために 'yourbutton' –

+0

を定義しませんでした。私はそれを編集しています。一方、私は意図的にユーザーのためにそれを残しました。 –

0

あなたのフラグメントでonViewCreated()を実装し、あなたのTextView初期化 -

private TextView textView; 
@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     textView = (TextView)view.findViewById(R.id.msgStatusPorta); 
} 

と変更changeText()〜 -

public void changeText(){ 
    //this textview should be bound in the fragment onCreate as a member variable 

    textView.setText("Porta Atualmente Aberta"); 

} 
0

FragmentクラスにonActivityCreatedメソッドを追加して、編集テキストビューをルックアップします。 onActivityCreatedメソッドは、ホストアクティビティの作成時にonCreateView()メソッドの後に呼び出されます。 ActivityおよびFragmentインスタンスがアクティビティのビュー階層とともに作成されています。この時点で、ビューはfindViewById()メソッドでアクセスできます。

private TextView frv; 
private Button yourbutton; 
... 

public void onActivityCreated(Bundle savedInstanceState) { 
    View rooView = getView(); 
    frv= (TextView)rooView.findViewById(R.id.msgStatusPorta); 
    yourbutton = (Button)rooView.findViewById(R.id.your_button_res_id); 
    ... 
} 
関連する問題