2016-05-12 59 views
0

我在片段中添加了onClick()按钮以显示结果。我还在MyActivity中加入了onActivityResult()方法。我想在更多片段中添加onClick()按钮并显示结果。Android中的多重OnactivityResult方法

在这种情况下,我应该如何在活动中编写多个onActivityResult()方法?

下面是我对OnActivityResultmethod代码:

button = (Button) view.findViewById(R.id.zing); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity()); 
      scanIntegrator.initiateScan(); 

     } 


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

     if (resultCode == RESULT_OK) { 
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, 
    data); 
Fragment fragment = this.getFragmentManager().findFragmentById(R.id.total_frame_content); 
      if (fragment instanceof CustomerIdFragment) { 
       if (scanResult != null) { 
        if (scanResult.getContents() == null) { 
         Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show(); 

        } else { 

         //String customerSno = scanResult.getContents().substring(0, 10), 
         //  passCode = scanResult.getContents().substring(10, 14); 
     Toast.makeText(this, " " + scanResult.getContents(), Toast.LENGTH_SHORT).show(); 
        // System.out.println("Result" + scanResult.getContents()); 

        } 
       } 

      } 
     } 

回答

1

尝试这个你无法在此改变的方法多的时间,这样你们PAS int value

startActivityForResult(intent,1); 

在活动结果

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

    if(requestCode == 1){ 

     if(resultCode == RESULT_OK){ 
     //do somthing 
     } 

    } 

    if(requestCode == 2){ 

     if(resultCode == RESULT_OK){ 
       //do somthing 
     } 

    } 

    if(requestCode == 3){ 

     if(resultCode == RESULT_OK){ 
      //do somthing 
     } 

    } 

} 

编辑答案 在你的片段Java文件

private int PICK_IMAGE_REQUEST_CODE = 1; 
btChoseFile = (Button)view.findViewById(R.id.btChoseFile); 

    btStar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent intent = new Intent(); 
      intent.setType("*/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST_CODE); 

     } 
    }); 




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

     if(requestCode == PICK_IMAGE_REQUEST_CODE){ 
      Toast.makeText(getActivity(),"On Activity Result in fragment",Toast.LENGTH_LONG).show(); 
     } 
    } 
+0

android geeks ...我是初学者到android..where我应该调用startActivityForResult(intent,1);和我的Onclik代码片段.... button =(Button)view.findViewById(R.id.zing); button.setOnClickListener(new View。OnClickListener(){ @Override public void onClick(View v){ IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity()); scanIntegrator.initiateScan(); } });像这样 – Kingraj

+0

@Kingraj对不起,我不明白你想做什么? –

+0

如果你想开始活动的结果u也可以从你的按钮调用它,你也可以overActivityResult在你的片段 –

0

你只需要使用switch情况下,像下面:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      try { 
       switch (requestCode) { 
        case REQUEST_CODE_CAPTURE_IMAGE: 

         if (requestCode == REQUEST_CODE_CAPTURE_IMAGE && resultCode == Activity.RESULT_OK) { 

         //your code 

         break; 
        case PHOTO_PICKER_ID: 
         if (requestCode == PHOTO_PICKER_ID && resultCode == Activity.RESULT_OK && null != data) { 
          //your code 
         } 

         break; 
       } 
      } catch (Exception e) 
      { 
       Log.d("krvrrusbviuritiribtr", e.getMessage()); 
      } 
     } 
0

当你调用startActivityForResult(意向,requestCode);,你只需要使用不同的requestCode。此号码将发送至onActivityResult(requestCode,resultCode,intent)

在您的活动中为请求创建一些常量(称为MyActivity)。

public class MyActivity{ 
    private static final int REQUEST_ONE = 1; 
    private static final int REQUEST_TWO = 2; 

    ... 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    //Management of the result, see below 
    } 
} 

使用与请求调用相对应的常量。

//startActivityForResult(intent,REQUEST_CODE); 

在你第一个片段,您将使用

public void clickButton(View v){ 
    startActivityForResult(intent,MyActivity.REQUEST_ONE); 
} 

在第二个片段,您将使用

public void clickButton(View v){ 
    startActivityForResult(intent,MyActivity.REQUEST_TWO); 
} 

然后你只需要实现在活动结果的方法请注意requestCode值以执行正确的代码。使用开关或其他条件。有更多的可能性(使用某种模式),但最简单的是那些。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if(requestCode == REQUEST_ONE){ 
     // the code for request one 
    } else if(requestCode == REQUEST_TWO){ 
     // the code for request two 
    } else { 
     super.onActivityResult(requestCode, resultCode, intent); 
    } 
} 

或开关

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    switch(requestCode) 
    case REQUEST_ONE: 
     // the code for request one 
     break; 
    case REQUEST_TWO: 
     // the code for request two 
     break; 
    default: 
     super.onActivityResult(requestCode, resultCode, intent); 
    } 
} 

如果你有太多的要求,为每个请求的一个方法,这将让结果的方法更具有可读性。

+0

即使我的回答与其他人相似,也没有人会解释如何设置requestCode,因此我决定纠正该问题。 – AxelH

+0

好的兄弟..没有必要写任何碎片哈? – Kingraj

+0

和我应该在哪里调用startActivityForResult(intent,REQUEST_ONE); – Kingraj

相关问题