web-dev-qa-db-ja.com

Android:ビュークラスとアクティビティクラスのstartActivityForResult&setResult

私は混乱しており、startActivityResultsとsetResultsを使用して以前のアクティビティからデータを取得する方法を知りません。ビュークラスとアクティビティクラスがあります。

基本的に私のビュークラスにはこのダイアログがあり、実際にcolorActivityクラスと呼ばれるアクティビティクラスを開始します。ユーザーが[はい]を選択すると、選択したサークルの名前がcolorActivityクラスに渡されます。 colorActivityクラスでは、ユーザーは特定の円のカラーコードを入力できます。このカラーコードをビュークラスに戻したいと思います。 startActivityForResultおよびsetResultメソッドを使用して、アクティビティからビューに値を戻す問題があります。さらに、フェッチされたデータをその後使用する方法は?

私のコードは次のとおりです

私のビュークラスからのOntoucheventコード:

            @Override
            public boolean onTouchEvent(MotionEvent event) {

                x = event.getX();
                y = event.getY();


                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:


                    for (int i = 0; i < circles.size(); i++) {


                        if (circles.get(i).contains(x, y)) {
                            circleID = i;

            Handler handler = new Handler();
                                handler.postDelayed(new Runnable() {
                                    @Override
                                    public void run() {
                                        AlertDialog.Builder builder = new Builder(
                                                getContext());
                                        final EditText text = new EditText(getContext());

                                        builder.setTitle("Adding colors to circles").setMessage(
                                                "Proceed to Enter color");
                                        builder.setPositiveButton("Yes",
                                                new DialogInterface.OnClickListener() {

                                                    public void onClick(DialogInterface di,
                                                            int i) {

                                                        Intent intent = new Intent(
                                                                getContext(),
                                                                colorActivity.class);

                                                         intent.putExtra("circlename", circleNameList.get(circleID));


    startActivityForResults(intent, 1); // error incurred here : The method startActivityForResult(Intent, int) is undefined for the type new DialogInterface.OnClickListener(){}
                                                    }

                                                });
                                        builder.setNegativeButton("No",
                                                new DialogInterface.OnClickListener() {

                                                    public void onClick(DialogInterface di,
                                                            int i) {
                                                    }

                                                });

                                        builder.create().show();
                                    }
                                }, 3000);
    break;

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) { // Please, use a final int instead of hardcoded
                                // int value
            if (resultCode == RESULT_OK) {
                 ccode = (String) data.getExtras().getString("colorcode");
        }

        }
    }

public static String getColorCode() {
        return ccode;
    }

ColorActivityで:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_ecolor);


        circlenametextview = (TextView)findViewById(R.id.circlenametextview);


        String circlename = super.getIntent().getStringExtra("circlename");
          circlenametextview.setText(circlename);//get the circle name


savebutton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                 Intent intent = new Intent(colorActivity.this, ?????);//how to return back to the view class?


               colorcode = colorEditText.getText().toString();// I am able to get value right up till this point
              Intent resultIntent = new Intent();
                   resultIntent.putExtra("colorcode", colorcode );

                   setResult(Activity.RESULT_OK, resultIntent);
                   finish();
            }// onclick

        });
        }
12
user3306996

プログラムを実行できるように他のコードを修正したら、次の方法でアクティビティcolorActivityからパラメーターを取得できます。

ステップ1:colorActivityから値を返す

_Intent resultIntent = new Intent();
resultIntent.putExtra("NAME OF THE PARAMETER", valueOfParameter);
...
setResult(Activity.RESULT_OK, resultIntent);
finish();
_

ステップ2:メインアクティビティからデータを収集する

@onActivityResult(...)をオーバーライドします。

_@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) { // Please, use a final int instead of hardcoded int value
    if (resultCode == RESULT_OK) {
        String value = (String) data.getExtras().getString("NAME OF THE PARAMETER");
_

参照資料

43
donnadulcinea

使ってみて

ActivityName.this.startActivityForResult(intent,int)

ああ、あなたが使用したコードで1つの小さなこと

startActivityForResults(intent、int)..replace that with

startActivityForResult(intent、int)

0
J.Ajendra