문제 해결

[Android] 다이얼로그에서 액티비티로 값 전달하기

토아드 2018. 8. 20. 00:28
반응형

액티비티 A에서 커스텀 다이얼로그를 띄운 뒤 값을 정하고 확인버튼을 눌렀을 때 액티비티의 ListView 갯수를 바꿔주는 기능을 작성 중이다. 어째선지 다이얼로그는 뜨지만 값 전달은 안되는 현상이 발생했다.


커스텀 다이얼로그 내 함수들

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
    public SeekbarDialog(Context context)
    {
        super(context);
        parentActivity = (AddWordGruopActivity)context;
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.seekbar_dialog);
        bar = findViewById(R.id.seekBar_addword_wordnumber);
        barValue = findViewById(R.id.text_seekbar_wordnumber);
        okButton = findViewById(R.id.button_seekbar_ok);
        cancelButton = findViewById(R.id.button_seekbar_cancel);
        Toast.makeText(parentActivity,"체인지",Toast.LENGTH_LONG);
        cancelButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                parentActivity.finish();
            }
        });
        okButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                parentActivity.setEditTextNum(Integer.parseInt(barValue.getText().toString()));
                parentActivity.notifyListViewDataChanged();
                dismiss();
            }
        });
        bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                barValue.setText(Integer.toString(i));
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                ;
            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                ;
            }
        });
cs


다이얼로그를 띄우는 액티비티 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 public void notifyListViewDataChanged()
    {
        adapter.notifyDataSetChanged();
        Toast.makeText(this,"데이터 갱신됨",Toast.LENGTH_LONG);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_word_gruop);
        SeekbarDialog seekbarDialog = new SeekbarDialog(this);
        seekbarDialog.show();
 
        listview = findViewById(R.id.addWordListView);
        adapter = new AddWGListViewAdpater(this,itemList);
        listview.setAdapter(adapter);
        wgName = findViewById(R.id.edit_addwg_wgname);
        cancelButton = findViewById(R.id.cancelAddButton);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("in","onItemClick");
                EditText item = view.findViewById(R.id.add_meaning_editText);
                if(item == null)
                    Log.d("nullerror","view is null");
                onclickedOnce(item);
            }
        });
        addWGButton = findViewById(R.id.addWGToDBButton);
        for (int i = 0; i < numOfEditText; i++)
        {
            adapter.addEditText();
        }
        adapter.notifyDataSetChanged();
    }
    public void setEditTextNum(Integer i)
    {
        this.numOfEditText = i;
    }
cs


현재 상황 : 다이얼로그 클래스를 생성하면서 현재 액티비티 Context를 보내준다. 다이얼로그 측에서는 확인 버튼을 눌렀을 때 생성될 때 받은 액티비티의 멤버변수를 바꾸는 setEditTextNum(int i) 을 호출해서 값을 변경해주고, 액티비티에서는 다시 그 값을 불러와 listView의 갯수를 수정하려고 한다. 하지만 어째선지 다이얼로그 내의 메소드들이 실행되지 않고 있다. onCreate나 생성자 두 군데 모두 코드를 이동시켜 봤지만 해결되지 않고 있다.





2018.08.21 추가


코드를 잘 보면 액티비티 측에서 값을 받아서 lsitView 갯수를 조정하는데 listView의 원소를 추가해 주지 않고 바로 notifyDataSetChanged()를 호출하고 있다. 멍청 ㅠ... 


디버깅을 Log.D()로 해 보니 값을 제대로 전달이 되었었다. 토스트 메시지가 나오지 않는 이유는 아직 모르겠지만 SeekBar를 이용해 ListView의 갯수를 조정하는 건 성공했다.

반응형