startActivityForResult

startActivityForResult

我有两个按钮和音频列表视图,对于第一个按钮,我使用LongClick和startActivityForResult方法从MediaPlayer的另一个活动中获取字符串。但是我也想使用第二个按钮。我需要使用startActivityForResult为另一个MediaPlayer获取另一个字符串,这是我的代码:

public class MainActivity extends Activity {
String setData, gotArnswer,s,s1;
MediaPlayer mMediaPlayer;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMediaPlayer = new MediaPlayer();
        Button b1 =(Button) findViewById(R.id.button1);
        Button b2 =(Button) findViewById(R.id.button2);
        b2.setOnLongClickListener(new View.OnLongClickListener() {

            public boolean onLongClick(View arg0) {
                // TODO Auto-generated method stub

                return false;
            }
        });
        b1.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                try {
                    if (mMediaPlayer.isPlaying()) {
                          mMediaPlayer.reset();
                 }
                  mMediaPlayer.setDataSource(s); //using string here
                  mMediaPlayer.prepare();
                 mMediaPlayer.start();
            } catch (Exception e) {

            }
            }
        });
        b1.setOnLongClickListener(new View.OnLongClickListener() {

            public boolean onLongClick(View v) {
                // TODO Auto-generated method stub
                Intent i = new Intent(MainActivity.this, Activityone.class);
                startActivityForResult(i, 0);
                return false;

            }
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK){
            Bundle basket = data.getExtras();
             s = basket.getString("arnswer");

        }
    }


和我的ListView onClick()

public void onItemClick(AdapterView parent, View v, int position,
                        long id) {
  System.gc();
  music_column_index = musiccursor
    .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
  musiccursor.moveToPosition(position);
  String filename = musiccursor.getString(music_column_index);
  Intent person = new Intent();
  Bundle backpack = new Bundle();
  backpack.putString("arnswer", filename);
  person.putExtras(backpack);
  setResult(RESULT_OK, person);
  finish();
}

};

最佳答案

因此,基本上,您需要了解请求代码,这是您传递给startActivityForResult的第二个参数。您可以从第一个按钮调用时使用0作为请求代码,从第二个按钮调用时使用1作为请求代码。

第一个按钮单击时开始结果的活动

 startActivityForResult(i, 0);


在第二个按钮上单击以开始结果的活动

 startActivityForResult(i, 1);


并且您需要在onActivityResult(..)方法中添加检查,以了解哪个活动正在以预期结果返回,如下所示。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK){
           if(requestCode == 0) {
            // handling code of startActivityForResult of first button
           Bundle basket = data.getExtras();
             s = basket.getString("arnswer");
            }
           if(requestCode == 1) {
            // handling code of startActivityForResult of second button
            Bundle basket = data.getExtras();
             s1 = basket.getString("arnswer");
             }

        }
    }


编辑:-定义常量,而不是使用0和1作为请求代码,以便将来可读。

关于java - startActivityForResult两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14632253/

10-12 06:27