アクティビティ クラス CreateEventPage があります。これは基本的に、イベントを作成するためのフォームをロードする onCreate メソッドのフラグメントを呼び出します。特定のボタンを押すと、showMapFragment() メソッドが呼び出され、このフラグメントが MyMapFragment オブジェクト (Fragment クラスを拡張) に置き換えられます。
CreateEventPage クラスは次のとおりです。
public class CreateEventPage extends FragmentActivity implements
MapLongPressListener {
private CreateEventFragment eventFragment;
private MyMapFragment mapFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragmentcontainer);
eventFragment = new CreateEventFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, eventFragment).commit();
// Check whether the activity is using the layout version with
// the fragment_container FrameLayout. If so, we must add the first fragment
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.create_event_page, menu);
return true;
}
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public void showMapFragment(View v) {
// If the frag is not available, we're in the one-pane layout and must swap frags...
// Create fragment and give it an argument for the selected article
mapFragment = new MyMapFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, mapFragment);
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public void MapLongPressed(String locationAddress, double latitude, double longitude) {
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.replace(R.id.fragment_container, eventFragment).commit();
eventFragment.initPositions(locationAddress, latitude, longitude);
}
}
eventFragment オブジェクトの initPositions メソッドを呼び出すと、EditText オブジェクトのテキスト フィールドを更新しようとします。ただし、UI は更新されません。UIスレッドでもメソッドを実行しようとしましたが、まだ更新されません。view は、フラグメントの onCreateView メソッドによって返される View オブジェクトを格納するグローバル変数です。initPositions メソッドは次のとおりです。
public void initPositions( String address, double lat, double longi) {
EditText location = (EditText) view.findViewById(R.id.LocationText);
latitude = lat;
longitude = longi;
location.setText(address);
Log.i("Init Positions", address);
Log.i("Init Positions", ""+latitude);
Log.i("Init Positions", ""+longitude);
Log.i("Init Positions", inputLocation.getText().toString());
}
ただし、これにもかかわらず、ログに正しい値が出力されていても、UI は更新されません。私が間違っていることを教えてください。
ありがとう、ロヒット