MainActivity不会从StartActivityForResult收到结果

时间:2013-07-04 07:45:06

标签: java android android-intent

我有以下常见问题,很容易,但我不知道我还能做些什么。 我有一个MainActivity,它开始于结果AnotherActivity。

MainActivity我(扩展Activity):

Intent i = new Intent(MainActivity.this, Altele.class);
startActivityForResult(i, 0);
...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Toast something; //toast NOT showing
    webview.loadUrl(data.getStringExtra("adresa"));
}

AnotherActivity我(扩展ListActivity):

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Toast something; //toast showing
    Intent intentMessage = new Intent();        
    intentMessage.putExtra("adresa", something);
    setResult(RESULT_OK, intentMessage);
    finish();       
}

现在,无论我做什么,来自AnotherActivity的数据似乎都没有达到MainActivity。在这里的示例中,我故意跳过requestCoderesultCode,因为它是相同的。所以我在这里,基本上都是在互联网上,但对我来说它不起作用。有什么想法吗?

源代码:http://www3.zippyshare.com/v/13090519/file.html

更新 我注意到了一件事。如果我在应用程序启动后立即开始第二个结果活动,则会触发主活动中的onActivityResult。如果我在应用程序启动后等待2秒或再次尝试运行结果的第二个活动,则不再发生任何事情。

6 个答案:

答案 0 :(得分:0)

您正在执行“putExtra”并尝试获取“getStringExtra”。你应该使用“putStringExtra”或“getExtra”。

答案 1 :(得分:0)

可能你可以尝试这个

startActivityForResult(i, **2**);

。 。

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
  super.onActivityResult(requestCode, resultCode, intent);
    switch (requestCode) {
     case **2**:
        toast something;//toast NOT showing
        webview.loadUrl(data.getStringExtra("adresa"));
     break;
    }
}

在列表视图中,您可以将其更改为

setResult(0, (new Intent()).setAction(i.getStringExtra("String")));

答案 2 :(得分:0)

你所做的似乎是正确的。我试过了它对我有用..我正在分享我写的示例代码。希望这会有所帮助。

我的主要活动

import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements android.view.View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b1 = (Button)findViewById(R.id.button1); 
        b1.setOnClickListener(this);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        System.out.println("abcd");
        Toast.makeText(this, data.getStringExtra("abc"), Toast.LENGTH_LONG).show();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v.getId() == R.id.button1){
             Intent in = new Intent(MainActivity.this,MainActivity1.class);
             startActivityForResult(in, 1);
        }

    }

}

我的MainActivity1扩展了ListActivity 它工作得很好,并打印出ddms和吐司信息

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity1 extends ListActivity{

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);
      }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        Intent intentMessage=new Intent();        
        intentMessage.putExtra("abc","def");
        setResult(RESULT_OK,intentMessage);
        finish();       
    }

}

答案 3 :(得分:0)

确保您的清单文件不包含您开始的活动的单一任务。

答案 4 :(得分:0)

愿这些帮助你......

不要使用INTENT在您的活动之间传递数据,而是尝试使用SharedPreference

它可以存储数据,并且可以轻松检索数据。

希望这些能帮到你..

答案 5 :(得分:0)

迟到的答案,但可能对某人有用。我遇到了同样的问题,当我注意到在AndroidManifest.xml文件中的MainActivity定义中我有了这行

android:noHistory="true"

当我将此行更正为

时,问题就消失了
android:noHistory="false"

实际上你也可以删除整行(见this link) 希望这也适合你。