【问题标题】:how pass result from alertDialog to onActivityResult如何将结果从 alertDialog 传递到 onActivityResult
【发布时间】:2013-12-23 00:28:34
【问题描述】:

我有 Activity_A 和 Activity_B。 我使用 onActivityResult 时出现问题:

java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=3, result=-1, data=Intent { (有附加功能) }} 到活动 {com.example.sellcar/com.example.sellcar.View_Offer}: android.database.CursorIndexOutOfBoundsException:请求索引 0, 大小为 0

我想我不能通过这种方式将“结果”从 alertDialog 传递给 onActivityResult。 我不知道如何解决这个问题:/ 请帮忙

Activity_A:

bBUTTON.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {           
            Intent intent = new Intent(Activity_A.this,Activity_B.class);
            startActivityForResult(intent, 3);

            }
        });
...
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode == 3 && resultCode == RESULT_OK){

                String pId = data.getStringExtra("MyData");

Toast.makeText(Activity_A.this,pId,Toast.LENGTH_LONG).show(); 
                }
    }

Activity_B:

    AlertDialog.Builder builder=new AlertDialog.Builder(View_Sell.this);
    builder.setTitle("UWAGA !").setMessage("blablabla");

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {       
       @Override
       public void onClick(DialogInterface dialog, int id) {                                                                                            
       String ostatnioDodanaSprzedaz="XYZ";
       Intent intent = new Intent();
       intent.putExtra("MyData", ostatnioDodanaSprzedaz);
       setResult(RESULT_OK, intent);
       onBackPressed();                                         
 } });

    builder.setNegativeButton("NO",  new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {                               
 } });  

AlertDialog ad = builder.create();
ad.show();

【问题讨论】:

  • 我尝试用finish()代替onBackPressed()但是不行

标签: java android sqlite android-activity sdk


【解决方案1】:

尝试替换:

setResult(RESULT_OK, intent);
onBackPressed();

开:

if (getParent() == null) {
    setResult(RESULT_OK, intent);
} else {
    getParent().setResult(RESULT_OK, intent);
}
finish();

【讨论】:

  • 这很奇怪,因为,我试过你的代码,它通常对我有用
  • 抱歉,它可以工作:) 这也是另一个错误。感谢您的帮助
【解决方案2】:

您可以遵循观察者模式。

首先,在Activity类本身中创建一个接口:

public interface ResultListener {
        void onResultSet(String text);
    }

然后,全局创建ResultListener的对象:

ResultListener = rl; 

在onCreate方法中实现onResultSet(String text)方法:

rl = new ResultListener() {

            @Override
            public void onPositiveResult(String text) {
                Toast.makeText(context, text, Toast.LENGTH_LONG).show();
            }
        };

接下来,创建AlertDialog

AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setTitle("UWAGA !").setMessage("blablabla");

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {       
       @Override
       public void onClick(DialogInterface dialog, int id) {                                                                                            
       String ostatnioDodanaSprzedaz="XYZ";
       tl.onResultSet(ostatnioDodanaSprzedaz);
      // onBackPressed();                                         
 } });

    builder.setNegativeButton("NO",  new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {                               
 } });  
    builder.show();

这是最终代码的外观:

        public class MainActivity extends Activity {

            ResultListener rl;

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

                rl = new ResultListener() {
                @Override
                public void onPositiveResult(String text) {
                    Toast.makeText(context, text, Toast.LENGTH_LONG).show();
                }
            };

            AlertDialog.Builder builder=new AlertDialog.Builder(this);
            builder.setTitle("UWAGA !").setMessage("blablabla");
            builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {       
                       @Override
                       public void onClick(DialogInterface dialog, int id) {                                                                                            
                       String ostatnioDodanaSprzedaz="XYZ";
                       rl.onResultSet(ostatnioDodanaSprzedaz);
                      // onBackPressed();                                         
                 } });

             builder.setNegativeButton("NO",  new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialog, int id) {                               
                 } });  

             builder.show();

        } //onCreate closed

        public interface ResultListener {
                void onResultSet(String text);
        }

} //MainActivity Class closed

【讨论】:

    猜你喜欢
    • 2021-06-18
    • 2019-12-09
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多