3

アクティビティ クラス 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 は更新されません。私が間違っていることを教えてください。

ありがとう、ロヒット

4

0 に答える 0