私は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は単に更新されません。
ありがとうございました!
にあなたは、コードスニペットを提供していただけますか? –
私はコールバックがうまくいくはずだと思いますが、コールバックを使用する場所にコードを投稿できますか? –
LocalBroadcastManagerを使用することができますここの例を参照してくださいhttp://stackoverflow.com/questions/8802157/how-to-use-localbroadcastmanager –