반응형
액티비티 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의 갯수를 조정하는 건 성공했다.
반응형
'문제 해결' 카테고리의 다른 글
[Android, SQL] SQLite에서 MAX값 받아오면서 생긴 오류 (0) | 2018.09.07 |
---|---|
[Android] ViewHolder 패턴을 사용하면서 생긴 오류 문제해결 (0) | 2018.09.02 |
[Android] EditText로 ListView 구성하기 (0) | 2018.08.27 |
소수 판별법, 왜 루트 N 이하의 수만 나눠보면 되는 것일까? (3) | 2018.03.28 |
[C++] template, typename, class 키워드 (0) | 2017.07.12 |