마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Fragment가 종료되지 않는거 같습니다.

0 추천

아래 그림과 같이 구현을 하였습니다.

문제는 ADetailFragment 에서 editbox에 글을 쓰다가 그 상태로 back 키로 AFragment 로 돌아왔는데..

다시 버튼을 클릭해서 ADetailFragment 로 들어가면 글을 쓴 그상태가 고대로 보여집니다.

마치 ADetailFragment 가  종료가 안되고 숨겼다 보여지는 것처럼요 ㅠㅠ

어떻게 처리를 해야할까요? ㅠㅠ 

 

// MainActivity.java
@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
        getSupportFragmentManager().popBackStack();
    } else {
        backPressCloseHandler.onBackPressed();
    }
}
...

private void moveFragment(Fragment frag){
    getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_layout, frag)
                .detach(frag)
                .attach(frag)
                .commit();
}


// AFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_cardview, container, false);

    ...
    mAdapter = new ARecyclerViewAdapter(getDataSet(), fm_, getActivity());
    mRecyclerView.setAdapter(mAdapter);

    return v;
}

// ARecyclerViewAdapter.java
public class ARecyclerViewAdapter extends RecyclerView.Adapter<ARecyclerViewAdapter.DataObjectHolder> {
    ...
    @Override
    public void onBindViewHolder(DataObjectHolder holder, final int position) {
        holder.btnView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment frag = ADetailFragment.sharedInstance();
                fm_.beginTransaction()
                        .replace(R.id.fragment_layout,frag)
                        .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                        .addToBackStack(null)
                        .commit();
            }
        });
    }
}

// ADetailFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_detail, container, false);

    edTitle = (EditText) v.findViewById(R.id.edTitle);
    edTitle.setText(mDataset.getTitle());
    edContents = (EditText) v.findViewById(R.id.edContents);

    return v;
}

개발자 님이 2016년 1월 28일 질문

1개의 답변

0 추천

ADetailFragment에서 키입력을 감지해서

백키를 누르면 finish하는 것으로 하면 안되나요?

마가 (590 포인트) 님이 2016년 1월 29일 답변
위에 onBackPressed() 이부분 말씀하시는건가요?
백키를 누르면 finish 를 한다는게 어떤말씀인지 잘 이해안가네용 ㅠ
public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK:
            return true;
        default:
            return true;
        }
    }

이경우 KeyEvent.KEYCODE_BACK의 동작을 하지 않고 넘어가기에 뒤로키를 눌러도 액티비티가 꺼지지 않는데,
저 키이벤트에서 명시적으로 finish시키면 어떻게 되나요?
위치는 액티비티에서 동작합니다.
...