【问题标题】:Start activity from fragment, then get callback从片段开始活动,然后获取回调
【发布时间】:2018-06-01 08:49:24
【问题描述】:

我正在尝试从我从片段中的意图开始的活动中获取回调。

我认为我可以使用 onActivityResult 执行此操作,但是当我在活动中 finish(); 时似乎没有调用它。这可能在片段中吗?

Fragment.java

@Nullable
@Override
public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

    getActivity().setTitle("Waiver");
    myView = inflater.inflate(R.layout.waiver_layout, container, false);

    signBtn = myView.findViewById(R.id.signBtn);

    signBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), SignatureActivity.class);

            intent.putExtra("signatureAbleId", device.id);
            intent.putExtra("signatureAbleType", "App\\Models\\Device");

            startActivity(intent);
        }
    });

    return myView;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    Log.v("Activity", "The activity has finished");

    if(resultCode == 200){
        saveWaiver();
    }
}

private void saveWaiver(){
    Log.v("Save Waiver", "Saving waiver for you.");
}

SignatureActivity.java

public class SignatureActivity extends AppCompatActivity {

    private Button btnClear;

    private Button btnSave;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

        setContentView(R.layout.activity_signature);

        Bundle bundle = getIntent().getExtras();

        if(bundle != null){
            signatureAbleId = bundle.getInt("signatureAbleId");
            signatureAbleType = bundle.getString("signatureAbleType");
        }

        btnClear = findViewById(R.id.btnClear);

        btnSave = findViewById(R.id.btnSave);

        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSignaturePad.clear();
            }
        });

        btnSave.setOnClickListener(new View.OnClickListener() {
            setResult(200);

            finish();
        });
    }
}

【问题讨论】:

  • 知道这是一个静止的问题,看看我应该做什么的答案

标签: java android android-fragments android-intent android-activity


【解决方案1】:

使用这个。它会帮助你

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

代替

Intent intent = new Intent(getActivity(), SignatureActivity.class);

是的,需要改变:

startActivity 到 startActivityForResult

【讨论】:

  • 你为什么要使用getContect()
  • 如果使用 getActivity 那么回调将转移到您的父活动 onActivityResult 方法,因为在 startActivityResult 期间您正在传递您的父活动的引用。在这里,您需要通过当前上下文传递 getContext() 方法,因此回调将到达您的片段而不是父活动。我希望你明白我的意思。
【解决方案2】:

使用startActivityForResult 代替startActivity

startActivityForResult(intent, 11);

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    if(requestCode == 11){
        if(resultCode == 200){
            saveWaiver();
        }
    }else{
        super.onActivityResult(requestCode, resultCode, data)
    }
}

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多