안드로이드 개발 질문/답변
(글 수 45,052)
alterDialog 사용시의 notifyDataSetChanged()대햐여 질문드립니다.
구성은
MainActivity.class
ListViewAdpater.class
Modify.class 되어있습니다.
질문내용은 ListViewAdpater어댑터에서 리스트 아이탬을 클릭하면 alterDialog 가 생성되고 거기서 수정 클릭하면
텍스트뷰가 수정되고 변경된 리스트가 출력되어야되는데 변경이 되지 않내요..
현제 Modify는 단순하지만 그곳에 디비와 연동 시키려 하고있습니다.
어떻게 해야될까요?
--------------------------------------------------------------------------------------------------
소스코드
MainActivity.class
public class MainActivity extends Activity {
ListViewAdpater adapter;
ListView listV;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
HashMap<String,String> map;
for(int i=1; i<20; i++){
map = new HashMap<String,String>();
map.put("num", i+". ");
map.put("title", i+"째 제목입니다.");
list.add(map);
}
context = MainActivity.this;
adapter = new ListViewAdpater(context,R.layout.listviewadapterlayout,list);
listV = (ListView)findViewById(R.id.listview01);
listV.setAdapter(adapter);
}
}
ListViewAdpater.class
Context context;
int layout;
List<HashMap<String, String>> items;
LayoutInflater inflater;
TextView tv3;
public ListViewAdpater(Context context, int layout, List<HashMap<String, String>> item) {
this.layout = layout;
items = item;
this.context = context;
inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position).toString();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int po = position;
if(convertView == null){
convertView = inflater.inflate(layout, parent,false);
}
TextView t1 = (TextView)convertView.findViewById(R.id.text1);
t1.setText(items.get(po).get("num").toString());
final TextView t2 = (TextView)convertView.findViewById(R.id.text2);
t2.setText(items.get(po).get("title").toString());
tv3 = (TextView)convertView.findViewById(R.id.text2);
t2.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final String[] arrayss = {"수정","삭제"};
if(event.getAction() == MotionEvent.ACTION_DOWN){
AlertDialog.Builder ald = new AlertDialog.Builder(context);
ald.setTitle("dder");
ald.setSingleChoiceItems(arrayss, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if("수정".equals(arrayss[id])){
//이부분입니다.
new Modify().mod(t2);
notifyDataSetChanged();
dialog.dismiss();
}else{
Log.e("1", getItem(po)+"");
items.remove(po);
notifyDataSetChanged();
dialog.dismiss();
}
}
});
ald.show();
}
return true;
}
}) ;
return convertView;
}
}
Modify.class
public class Modify {
TextView t2;
public void mod(TextView t2) {
this.t2 = t2;
t2.setText("바보");
}
}
getView()함수내에서 아래 코드와 같이 값을 설정하는데, 수정하시는 부분에서 items 내용을 변경하는 부분이 없어서,
getView()가 호출 될 때 기존에 저장되어 있는 값으로 설정되는 것 같네요
빨간색으로 표시한 부분에서 items 값을 업데이트 해 보세요.