2

アクティビティ A にいますが、アクティビティ B に移動します。アクティビティ B での作業が完了したら、アクティビティ A に戻ります (ボタンの onclick() イベントで finish(); 関数を呼び出します)。この仕上げ(); 関数は、アクティビティ A を再開することで、アクティビティ A に戻ります。データと共にアクティビティ B から A に移動するにはどうすればよいですか。

コードは次のとおりです:- アクティビティ A:-

NewMain.java

public void onRestoreInstanceState(Bundle savedInstanceState) {
        // Always call the superclass so it can restore the view hierarchy
        super.onRestoreInstanceState(savedInstanceState);

        // Restore state members from saved instance

        alarmname1 = savedInstanceState.getString("EXTRA_MESSAGE");
        range1 = savedInstanceState.getInt("EXTRA_MESSAGE_RANGE", 100);
        //Toast.makeText(NewMain.this, longi1, 2000).show();




    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1) {

             if(resultCode == RESULT_OK){   

                 /*Bundle bu_lati = getIntent().getExtras();
                    lati1= Double.parseDouble( bu_lati.getString("EXTRA_MESSAGE_LATITUDE"));
                    Bundle bu_longi = getIntent().getExtras();
                    longi1=Double.parseDouble( bu_longi.getString("EXTRA_MESSAGE_LONGITUDE"));
                    */

                 Bundle lati1=data.getBundleExtra("EXTRA_MESSAGE_LATITUDE");   
                 Bundle longi1=data.getBundleExtra("EXTRA_MESSAGE_LONGITUDE");
             }
             if (resultCode == RESULT_CANCELED) {    
                 //Write your code on no result return 
             }
          }
        }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.newgui1);

         alarmname=(EditText) findViewById(R.id.editText1);
         range=(EditText) findViewById(R.id.editText2);
        Button button = (Button) findViewById(R.id.button2);
        im1=(ImageButton) findViewById(R.id.imageButton1);

        Button lnl = (Button) findViewById(R.id.button3);

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                //alarmname

                alarmname1=alarmname.getText().toString();
                //range


                range1=Integer.parseInt(range.getText().toString());

               Intent myIntent = new Intent(NewMain.this, NewMain2.class);
              myIntent.putExtra("EXTRA_MESSAGE", alarmname1);
              myIntent.putExtra("EXTRA_MESSAGE_RANGE", range1);
              myIntent.putExtra("EXTRA_MESSAGE_LATITUDE1", lati1);
              myIntent.putExtra("EXTRA_MESSAGE_LONGITUDE1", longi1);
              NewMain.this.startActivity(myIntent);

           }
         });

        lnl.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

               Toast.makeText(NewMain.this, longi1, 2000).show();



            }
         });
        im1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

               Intent myIntent = new Intent(NewMain.this, MapViewDemo.class);
              NewMain.this.startActivity(myIntent);

           }
         }); 
        }

    }

アクティビティ B:-

MapViewDemo.java



public boolean onTouchEvent(MotionEvent event, MapView mapView) 
            {   
                //---when user lifts his finger---
                if (event.getAction() == 1) {                
                    GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(),(int) event.getY());
                    lati=p.getLatitudeE6() / 1E6;
                    longi=p.getLongitudeE6() /1E6;
                        Toast.makeText(getBaseContext(), lati+ "," +longi, 
                            Toast.LENGTH_SHORT).show();


                }                            
                return false;
            }        

        } 

            Button buttondone = (Button) findViewById(R.id.btndone);
            buttondone.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {



                    Intent myIntent1 = new Intent();

                     myIntent1.putExtra("EXTRA_MESSAGE_LATITUDE", lati);
                     myIntent1.putExtra("EXTRA_MESSAGE_LONGITUDE", longi);

                     setResult(NewMain.RESULT_OK, myIntent1);
                    finish();




                }
             });

    }
4

5 に答える 5

3

次のように B アクティビティを開始します。

Intent intent = new Intent(ActivityA.this, ActivityB.class);
    startActivityForResult(intent, 1);

終了前 B アクティビティ setResult() のように、

Intent i =new Intent();
    i.putExtra("yourdata", "abc");
    setResult(2, i);
    finish();

あなたのA活動について

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode==2){
        String s = data.getStringExtra("yourdata");
    }
}

このようにして、子アクティビティから親アクティビティにデータを渡すことができます。

于 2013-03-07T11:09:26.523 に答える
1

これを行う最善の方法は、Intent と要求コードをパラメーターとして受け取るパターンstartActivityForResultを使用することです。

startActivity と同じですが、アクティビティ B が終了したときに結果を待つことができます。

アクティビティ B の終了を呼び出す前に、アクティビティ BでsetResultを使用してから、finish() を使用する必要があります。setResult は、intent (A に返したいデータ) と resultCode (OK、エラー コード) の 2 つのパラメーターを取ります。

アクティビティ A では、メソッドonActivityResultをオーバーライドする結果を待機して取得できます

ここに良いチュートリアルがあります:アクティビティから結果を取得する

于 2013-03-07T11:08:35.850 に答える
0

リンクを参照すると、全体の概念を理解できます。

于 2013-03-07T11:28:05.237 に答える
0

アクティビティ newMain から requestcode を渡し、startActivityForResult代わりに
NewMain.this.startActivity(myIntent)次を使用します。

startActivityForResult(intent, 10);

(requestCode == 10)あなたのif条件を作ってください。

それがうまくいくことを願っています

于 2013-03-07T11:11:26.613 に答える
0

このコードを使用します。
2 番目のアクティビティを開始するには:

 Intent myIntent = new Intent(NewMain.this, MapViewDemo.class);
startActivityForResult(launchNewIntent, 2);

活動Aで

    int result1 ;
int result2 ;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 2) {
        if (resultCode == RESULT_OK) {
            result1=data.getExtras().getInt("EXTRA_MESSAGE_LATITUDE");
            result2 =data.getExtras().getInt("EXTRA_MESSAGE_LONGITUDE");
        }
    }
}

アクティビティ B で

        Intent myIntent1 = new Intent();
    myIntent1.putExtra("EXTRA_MESSAGE_LATITUDE", lati);
    myIntent1.putExtra("EXTRA_MESSAGE_LONGITUDE", longi);
    setResult(Activity.RESULT_OK, resultData);
    finish();
于 2013-03-07T11:12:59.530 に答える