簡體   English   中英

onActivityResult中的requestCode和resultCode指的是什么?

[英]What does requestCode and resultCode in onActivityResult refer to?

大家好 我是Android新手,現在在程序中使用startActivityForResult 在我的應用程序中,我有兩個按鈕和兩個textView。 這兩個button用於打開對話框。 如何檢查onActivityResult上按下的按鈕,以便可以相應於按鈕將TextView設置為setText?

  int a1 = 1;
  int a2 = 2;

   button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialogRadio(a1);

            }
        });

        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialogRadio(a2);

            }
        });

 public void AlertDialogRadio(final int k) {  //parameter k is never used
            final CharSequence[] ClaimsModel = {"Project", "Petrol", "Car Maintenance"
                    , "Medical", "Other"};

            AlertDialog.Builder alt_bld = new AlertDialog.Builder(getActivity());
            alt_bld.setTitle("Select a Claims");
            alt_bld.setSingleChoiceItems(ClaimsModel, -1, new DialogInterface
                    .OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    if (item == 0) {
                        Intent intent = new Intent(getActivity().getApplicationContext(), Project1.class);
                        startActivityForResult(intent, 0);
                    } else if (item == 1) {
                        Intent intent = new Intent(getActivity().getApplicationContext(), Petrol.class);
                        startActivityForResult(intent, 1);
                    } else if (item == 2) {
                        Intent intent = new Intent(getActivity().getApplicationContext(), CarMainten.class);
                        startActivityForResult(intent, 2);
                    } else if (item == 3) {
                        Intent intent = new Intent(getActivity().getApplicationContext(), Medical.class);
                        startActivityForResult(intent, 3);
                    } else if (item == 4) {
                        Intent intent = new Intent(getActivity().getApplicationContext(), Other.class);
                        startActivityForResult(intent, 4);
                    }

                    dialog.dismiss();

                }
            });
            AlertDialog alert = alt_bld.create();
            alert.show();
        }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == 1) { // if button1 was clicked
            switch (requestCode) {
                case 0:
                    String result = data.getStringExtra("text");
                    String b = data.getStringExtra("a");
                    c.setText("            " + b + "------" + "RM " + result);
                    Toast.makeText(getActivity(), "Not completed ", Toast.LENGTH_LONG).show();
                    break;

                case 1:
                    String result1 = data.getStringExtra("text");
                    String b1 = data.getStringExtra("a");
                    c.setText("            " + b1 + "------" + "RM " + result1);
                    break;


                case 2:
                    String result2 = data.getStringExtra("text");
                    String b2 = data.getStringExtra("a");
                    c.setText("            " + b2 + "------" + "RM " + result2);
                    break;

                case 3:
                    String result3 = data.getStringExtra("text");
                    String b3 = data.getStringExtra("a");
                    c.setText("            " + b3 + "------" + "RM " + result3);
                    break;

                case 4:
                    String result4 = data.getStringExtra("text");
                    String b4 = data.getStringExtra("a");
                    c.setText("            " + b4 + "------" + "RM " + result4);
                    break;
            }
        }
        else if (resultCode == 2) { // if button2 was clicked
            switch (requestCode) {
                case 0:
                    String result = data.getStringExtra("text");
                    String b = data.getStringExtra("a");
                    d.setText("            " + b + "------" + "RM " + result);
                    break;

                case 1:
                    String result1 = data.getStringExtra("text");
                    String b1 = data.getStringExtra("a");
                    d.setText("            " + b1 + "------" + "RM " + result1);
                    break;

                case 2:
                    String result2 = data.getStringExtra("text");
                    String b2 = data.getStringExtra("a");
                    d.setText("            " + b2 + "------" + "RM " + result2);
                    break;

                case 3:
                    String result3 = data.getStringExtra("text");
                    String b3 = data.getStringExtra("a");
                    d.setText("            " + b3 + "------" + "RM " + result3);
                    break;

                case 4:
                    String result4 = data.getStringExtra("text");
                    String b4 = data.getStringExtra("a");
                    d.setText("            " + b4 + "------" + "RM " + result4);
                    break;
            }
        }
    }

所以我的程序應該像這樣工作:如果單擊了button1 .... c.setText(); 如果單擊了button2 .... d.setText();

但是該程序現在在TextView上什么也沒有顯示 錯誤是否來自if (resultCode == 1)else if (resultCode == 2)嗎? 非常感謝

假設使用選擇Project1.class

Project1.class

public class Project1 extends AppCompatActivity {
    private static String text;
    private static String a;
    private static EditText txt;
    private int g;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.project);
       txt= (EditText)findViewById(R.id.editText36);
        Button b=(Button)findViewById(R.id.button17);

        b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent returnIntent = new Intent();
                a="Project";
                text = txt.getText().toString();
                returnIntent.putExtra("text", text);
                returnIntent.putExtra("a",a);
              //  returnIntent.putExtra("k",getIntent().getExtras().getString("k"));
                setResult(Activity.RESULT_OK, returnIntent);
                finish();
            }
        });

    }
}

您應該避免在此處使用文字代碼。

if (resultCode == 1)

使用命名常量好得多-

if (resultCode == RESULT_OK) {

RESULT_OK為-1,所以可能是您的問題。

一旦我將所有請求代碼設置為相同。 沒用 看來你的請求代碼不同的,我已經習慣了看到他們這樣的:

private static final int REQUEST_CODE_THIS = 0;
private static final int REQUEST_CODE_THAT = 1;
private static final int REQUEST_CODE_THE_OTHER = 1003;

public void onClick(DialogInterface dialog, int item) {
                    if (item == 0) {
                        Intent intent = new     Intent(getActivity().getApplicationContext(), Project1.class);
                        startActivityForResult(intent, REQUEST_CODE_THIS);

檢查像這樣更改onActivityResult()是否有幫助。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_THIS) { // if button1 was clicked
        switch (resultCode == RESULT_OK) {
            case 0:
                   ...
        }

request_code是調用函數的標識,從那里開始請求,result_code是被調用的函數標識符,它還將被調用消息的狀態指定為Intent.ACTIVITY_OK,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM