Начните деятельность с фрагмента, затем получите обратный вызов - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь получить обратный вызов от действия, которое я начинаю с намерения в моем фрагменте.

Я думал, что смогу сделать это с помощью 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();
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Используйте это.Это поможет вам

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

Вместо

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

И да нужно изменить:

startActivity to startActivityForResult

0 голосов
/ 01 июня 2018

Используйте 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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...