2016-08-10 5 views
0

私は2つの断片を持つViewPagerを持っています。私がしたいこと;ビューをViewPagerの別のフラグメントからどのように変更できますか?

ImageViewの画像を変更し、TextViewの一部のプロパティを別のフラグメントから変更します。

私が行うために、これを試してみました:

これは私のSettingsFragment.javaです。この断片から、私はCalculatorFragmentのいくつかのビューを変更したいと思います。 OnActivityResultメソッドは、ユーザーがギャラリーから画像を選択するときに呼び出されます。このメソッドが呼び出された場合は、この画像を保存してから、「コールバックメソッド」を呼び出して、MainActivityはユーザーがギャラリーから新しい画像を選択することを認識します。

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == getActivity().RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) { 

      try { 
       imageSaver.save(MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), data.getData())); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      settingsFragmentCallback.newMessage(NEW_PICTURE); 
     } 
    } 
} 

public interface SettingsFragmentCallback{ 
    void newMessage(String message); 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    try { 
     settingsFragmentCallback = (SettingsFragmentCallback) context; 
    } catch (ClassCastException e){ 

    } 
} 

これは私のMainActivityにあります。ここで私は設定フラグメントからメッセージを受け取り、それを受け取ったときにCalculator Fragment getMessageメソッドを呼び出すので、このFragmentはユーザーがギャラリーから画像を選択することを知っています。

public class MainActivity extends FragmentActivity implements 
            SettingsFragment.SettingsFragmentCallback { 

@Override 
public void newMessage(String message) { 
    CalculatorFragment cf = (CalculatorFragment) 
       getSupportFragmentManager().findFragmentById(R.id.fragmentCalculator); 
    cf.getMessage(message); 
} 

これは電卓の断片です。ユーザーがギャラリーから新しい画像を選択した場合は、setbackgroundメソッドを呼び出します。

private void setBackground(){ 
    final Bitmap bitmap = imageSaver.load(); 

    if(bitmap != null){ 
     imageViewBackground.setImageBitmap(bitmap); 

    } 
} 

public void getMessage(String message){ 
    switch (message){ 
     case SettingsFragment.NEW_PICTURE: 
      setBackground(); 
      break; 
     default: 
      break; 
    } 
} 

私はこれをデバッグし、それが正常に(それがsetBackground方法で来る)が、ImageViewのが更新されていない何らかの理由で動作します。画像自体は正しく読み込まれて保存されますが、ImageViewは単に更新されません。

ありがとうございました!

+0

にあなたは、コードスニペットを提供していただけますか? –

+0

私はコールバックがうまくいくはずだと思いますが、コールバックを使用する場所にコードを投稿できますか? –

+0

LocalBroadcastManagerを使用することができますここの例を参照してくださいhttp://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager –

答えて

0

両方のフラグメントが同じActivityであるため、メソッドをActivityクラスに追加し、もう片方のフラグメントの中で何かを変更したいときは、それを1つのフラグメントから呼び出します。 UIに触れる前に、isAdded()メソッドを呼び出すことによって、変更を加えたいフラグメントをアクティビティに「追加」してください。

0

フラグメンテーションAとフラグメントBの2つのフラグメントがあるとします。 今、フラグメントAには一部のImageViewとTextViewがあり、フラグメントBから変更したいとします。あなたがデータを変更したいときは、次のようにしてくださいViewPager FragmentAに位置0にあり、FragmentBが今の位置1 であると仮定します。

View view = yourViewPager.getChildAt(0); 
((ImageView) view.findViewById(R.id.idOfImageView)).setImageResource(yourResource); 
((TextView) view.findViewById(R.id.idOfTextView)).setText("Your Text"); 
+0

こんにちは、私はそれを試みましたが、それは私のためには動作しません。どんな考え? – tomhogenkamp

+0

すべてのフラグメントとviewPagerが正しく実装されていればうまくいくはずです。 –

関連する問題