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

intent할 때 마다 listview가 계속 생성되고 toast메시지가 약 5번 출력 되네요..

0 추천
private void setUpData() {
    Sport run = new Sport("1", "뛰기", R.drawable.run);
    sportList.add(run);
    Sport bike = new Sport("2", "자전거", R.drawable.bike);
    sportList.add(bike); //이하생략
public void setUpOnclickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            Sport selectSport = (Sport) frag3Binding.sportListView.getItemAtPosition(position);
            Intent showdetail = new Intent(getActivity(), SportdetailActivity.class);
            showdetail.putExtra("id", selectSport.getId());
            startActivity(showdetail);
        }
    });
if(time.isEmpty()){
    Toast.makeText(getApplicationContext(),"1~1000 범위의 숫자를 입력해주세요.001",Toast.LENGTH_SHORT).show();
}
else{
    switch (Integer.valueOf(id)) {
        case 0:
            result1 = (0.0035 * Double.parseDouble(weight) * 3 * Integer.parseInt(time)) * 5;
            break;//이하생략
첫번째는 아이디 값이고 두번째는 아이디값을 프래그먼트에서 액티비티로 전달해주면 세번째에서 계산을 하는 형식입니다 !!
하지만 리스트를 누를때마다 리스트가 17개인데 34개 51개 68개 이런식으로 배수가 되고 왠지는 모르겠지만 3번째 toast메시지는 조건문에 걸리게 time을 비워두면 약 5번 정도가 계속 출력되더라고요 해결방안이 있으면 알려주시면 감사하겠습니다 ㅠㅠ 
응애나애기개발자 (120 포인트) 님이 2022년 10월 24일 질문

1개의 답변

0 추천

해당 코드에는 문제가 되는 부분이 빠져 있는 것으로 보이네요. 설명하신 증상을 바탕으로 추측해 보면, Intent가 넘어올 때, 해당 액티비티에서는 리스트 어댑터에 들어가는 리스트나 배열을 클리어한 후, 데이터를 가져와야 할 것 같은데, 그냥 기존의 리스트나 배열에 추가적으로 가져온 데이터를 더해서 발생하는 문제 처럼 보이네요.

그리고 토스트가 여러번 출력되는 문제는 time.isEmpty()가 계속 호출되는 것 같은데, 라이프사이클과 관련이 있을 수 있어 보입니다만, 주어진 코드만으로는 단정하기는 어렵네요.

 

문제와는 별개지만, 살짝 눈에 띄어서.... 위의 코드 중의 일부는 아래와 같이 early return 을 사용하셔서 처리하시는게 코드를 읽기가 더 좋습니다.

if(time.isEmpty()){
    Toast.makeText(getApplicationContext(),"1~1000 범위의 숫자를 입력해주세요.001",Toast.LENGTH_SHORT).show();
    return;
}


switch (Integer.valueOf(id)) {
        ...

 

spark (226,720 포인트) 님이 2022년 10월 25일 답변
...