1

SherlockActivityを拡張するアクティビティ「SearchActivity」があります。このアクティビティでは、検索バーと[実行]ボタンを備えたオプションメニューがあります。検索バーに入力されたデータは、SherlockMapActivityを拡張する前のアクティビティ「NavigationActivity」に渡される必要があります。

これはSearchActivityの私のコードの一部です:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.go:
           Intent intent = new Intent();
           intent.putExtra("SearchText", enteredText);
           setResult(200, intent);
           startActivityForResult(intent, 100);
           finish();
           break;

    }
    return true;
}

これは、NavigationActivityのonActivityResult()メソッドです。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    System.out.println("In onActivityResult method");
    if(data != null && resultCode == 200 && requestCode == 100) {
        String text = data.getStringExtra("SearchText");
        System.out.println("The data is: " + text);
        Toast.makeText(this, "The text entered in the search bar is: " + text, Toast.LENGTH_LONG).show();
    }       
}

問題は、onActivityResult()メソッドがNavigationActivityで呼び出されないことです。[移動]ボタンを押すと、SearchActivityからNavigationActivityに移動できますが、NavigationActivityでデータを取得することはできません。この面で私を助けてくれませんか?

ありがとうございました。

4

3 に答える 3

1

以下のサンプルコードを参照し、それに応じてコードを変更してください。

ナビゲーションアクティビティ

public class NavigationActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.navigationActivity);

    Button btnTest = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) 
                    {
          Intent intent = new Intent(Launcher.this,Activity2.class);
          startActivityForResult(intent, 100);
        }

    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode ==  200)
    {

        String enteredText = "no action defined for this requestcode :"+resultCode;
        if(requestCode == 100)
        {
            enteredText = (String)data.getStringExtra("SearchText");

        }
        Toast.makeText(Launcher.this,enteredText,Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(Launcher.this,"some exception occurred",Toast.LENGTH_SHORT).show();
    }
}
}

検索アクティビティ

public class SearchActivity extends Activity{


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    Button btnGO = (Button)findViewById(R.id.buttonGo);
    btnGO .setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            EditText edtSearchBar = (EditText )findViewById(R.id.tvTest);

               intent.putExtra("SearchText", edtSearchBar .getText().toString());

            setResult(200,intent);
            finish();

        }
    });
}
}
于 2012-09-18T07:02:25.183 に答える
1

逆にする必要はありませんか?

私の理解では、からではなく、から電話をかける必要がありstartActivityForResult(..)ます。NavigationActivitySearchActivity

NavigationActivity

Intent intent= new Intent(context, SearchActivity.class);
startActivityForResult(intent, 200);

そして、SearchActivity電話で

setResult(..);
finish();

結果を呼び出し元のアクティビティに戻し、onActivityResult(..)メソッドをトリガーします。

この関連する回答を参照してください。

于 2012-09-18T07:10:19.717 に答える
0

startActivityForResultは、呼び出されたアクティビティから呼び出し元のアクティビティにデータを返すために使用されます。つまり、アクティビティAがBを呼び出している場合はstartActivityForResult、BからAにデータを返すために使用できます。

于 2012-09-18T07:10:43.510 に答える