0

コードの何が問題なのかわかりません:

この方法で別のアクティビティ(B)を開始するアクティビティ(それを呼び出しましょう; A)があります:

A:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
        ...
    gridOpciones.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int pos, long 
            intent = new Intent(ReproductorActivity.this, B.class);
            startActivityForResult(intent, B.RESULT_PATH);
    }
}

このonItemLongClickでB 'リストビューに割り当てられたOnLongItemClickListenerを持っています

@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
    ctx.onLongClick(arg2);
    return false;
}

ctx は OnLongItemClickListener の B オブジェクト所有者であり、クラス B でこのメソッドを onLongClick にします。

public void onLongClick(int arg2) {
    Intent returnIntent = new Intent();
    returnIntent.putExtra("PATH", getItem(arg2));
    setResult(Activity.RESULT_OK, returnIntent);
    finish();
}

また、次のように A にコールバック関数もあります。

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data){               
    if (requestCode == B.RESULT_PATH) {
        if (resultCode == RESULT_OK) {
        ... get data, do stuff....                   
        }
    }
}

だから、私の問題はそれがうまくいかなかったことです。Bと表示されますが、戻ったときに何もしません...

私はそれをデバッグし、クラス A のグリッドの要素をクリックすると、その OnItemClickListeneronItemClickが呼び出されますが、この後、AonActivityResultが呼び出され、その後 B アクティビティが表示されます。Bのアイテムをロングクリックすると、それは実行されonLongClick(int)ますが、コールバックがありませんA.onActivityResult...

何が起こるかわかりません、何か考えはありますか?どんな手掛かり?

ありがとう。

編集: OnActivityResult が呼び出されると、requestCode == B.RESULT_PATH

4

1 に答える 1

0

onActivityResult では、最初の if ステートメントに resultCode ではなく requestCode が必要です。

@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data){               
    if (requestCode == FileSelector.RESULT_PATH) {
        if (resultCode == RESULT_OK) {
        ... get data, do stuff....                   
        }
    }
}
于 2013-02-21T23:18:32.320 に答える