Как перейти к следующему действию путем передачи значения намерению из AlertDialog? - PullRequest
2 голосов
/ 04 сентября 2011

Я хочу вернуться к Place.class, который показывает полную информацию о месте ... теперь я могу вернуться к активности Place, но информация показывает только title и address .. Я думаю, что это может случиться в onTab методе. Он имеет только 2 вещи, которые были введены в намерение ....

intent.putExtra(Constants.COL_TITLE, oi.getTitle());
intent.putExtra(Constants.COL_ADDRESS, oi.getSnippet());

Если я хочу поставить другое поле, т.е. content phone и т. Д. Как поместить данные из базы данных в это намерение?

intent.putExtra(Constants.COL_CON, ..........);

Спасибо за вашу помощь

У меня есть 3 класса здесь

xxx.class

public class xxx extends MapActivity {

    MapView mapView;
    MapController mapController;
    private static MyDB mDbHelper;
    private Cursor c;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aboutcm);

        mDbHelper = new MyDB(this);
        mDbHelper.createDatabase();
        mDbHelper.open();
        c = mDbHelper.getAttraction();

        mapView = (MapView) findViewById(R.id.mapview);
        mapController = mapView.getController();
        Drawable drawable = this.getResources().getDrawable(R.drawable.map_pin_3);
        List<Overlay> mapOverlays = mapView.getOverlays();
        PlaceItemizedOverlay itemizedoverlay = new PlaceItemizedOverlay(drawable, this);


        mapController.setZoom(13);
        mapView.setBuiltInZoomControls(true);


        c.moveToFirst(); 
        do {

            String title = c.getString(c
                    .getColumnIndex(Constants.COL_TITLE));
            String address = c.getString(c
                    .getColumnIndex(Constants.COL_ADDRESS));
            String content = c.getString(c
                    .getColumnIndex(Constants.COL_CONTENT));
            int latitude = (int) (c.getDouble(c
                    .getColumnIndex(Constants.COL_LA)) * 1E6);
            int longitude = (int) (c.getDouble(c
                    .getColumnIndex(Constants.COL_LONG)) * 1E6);


            itemizedoverlay.addOverlay(new OverlayItem(new GeoPoint(latitude, longitude), title,
                    address));
            mapOverlays.add(itemizedoverlay);

        } while (c.moveToNext());
        mDbHelper.close();

    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

}

PlaceItemizedOverlay.class

public class PlaceItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private Context mContext;
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

    public PlaceItemizedOverlay(Drawable defaultMarker, Context context)
    {
        super(boundCenterBottom(defaultMarker));
        mContext = context;
    }
    public void addOverlay(OverlayItem overlay) {
        mOverlays.add(overlay);
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return mOverlays.get(i);
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return mOverlays.size();    }


    @Override
    protected boolean onTap(int index) {

      final OverlayItem oi = mOverlays.get(index);
      AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
      dialog.setTitle(oi.getTitle());
      dialog.setMessage(oi.getSnippet());
      dialog.setNegativeButton("Back", null);
      dialog.setPositiveButton("See More Detail", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
              Intent intent = new Intent(mContext, Place.class);
                intent.putExtra(Constants.COL_TITLE, oi.getTitle());
                intent.putExtra(Constants.COL_ADDRESS, oi.getSnippet());
                mContext.startActivity(intent); 
      }});
      dialog.show();
      return true;

    }


}

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

Допустим, вы хотите передать строку "123456789" из xxx Activity в Place.class. Тогда вы будете использовать intent.putExtra("content", "123456789"), а затем в Place.class intent.getStringExtra("content") вернет "123456789"

Могу ли я объявить .... Намерение я = новое намерение (??????, Place.class); } А также что я должен положить в ??????

Вы могли бы сделать одну из трех вещей. Во-первых, мой предпочтительный метод в теле класса объявляет:

Context context;

А потом в onCreate(...) объявить:

context = this;

и тогда вы можете сделать:

Intent i = new Intent(context, Place.class);

Во-вторых, вы можете объявить:

Intent i = new Intent(getApplicationContext(), Place.class);

В-третьих, в теле вашего класса вы можете объявить:

Intent i;

Затем в onCreate(...):

i = new Intent(this, Place.class);

С третьим способом вы сможете использовать startActivity(i) в alertDialog

0 голосов
/ 15 июня 2013

Это простая программа передачи намерений: от основного намерения до второго намерения

public void nextButtonOnClick(View arg0)
    {
        Intent intent=(new Intent(MainActivity.this,SecondActivity.class));
        startActivity(intent);
    }

Изменить в файле XML:

android:onClick="nextButtonOnClick"
...