거두절미하고 질문드리겠습니다~!
현재 listview를 활용하여 서버로부터 게시글을 받아와 화면에 뿌려주는 어플을 구현중에 있습니다.
다른곳은 전부 다 잘 작동이 되는데 갱신 부분에서 문제가 생기는듯 합니다..
현재 액티비티의 구성은 다음과 같습니다.
ㅡㅡㅡㅡㅡㅡㅡㅡ
리스트뷰
ㅡㅡㅡㅡㅡㅡㅡㅡ
에딧 텍스트 창
ㅡㅡㅡㅡㅡㅡㅡㅡ
현재 이런 식으로 구성되어 있는데
이상태에서 액티비티를 실행하면 리스트뷰에는 바로 데이터가 뜨지 않습니다.
근데 에딧텍스트를 제가 클릭하면 소프트키보드창이 뜨면서 함께 리스트뷰에 내용도 올라옵니다..
어디가 문젠질 잘 모르겠습니다.. 어딘가 순서에서 잘못된것 같은데...
많은 조언 부탁드리겠습니다..
관련부분 소스로 첨부하겠습니다.
public class snsView extends ListActivity {
EditText etContent;
public static ArrayList<snsData> list;
public static ContentAdapter s_adapter;
int num = 0;
private ProgressDialog progress;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.snsview);
etContent = (EditText) findViewById(R.id.etSNSContent);
list = new ArrayList<snsData>();
s_adapter = new ContentAdapter(this, R.layout.snscontent, list);
setListAdapter(s_adapter);
setList();
writeBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (LoginStatus.isStatus()) {
String comment = etContent.getText().toString();
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(
"yyyy.MM.dd HH:mm:ss", Locale.KOREA);
Date date = new Date();
String mTime = mSimpleDateFormat.format(date);
new networkProcess(3, userid, comment, mTime);
progressProcess();
// refreshView();
etContent.setText("");
etContent.clearFocus();
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(etContent.getWindowToken(), 0);
}
}
});
}
private void setList() {
list.clear();
select(); //XML로 받아와 파싱하는곳까지 모두 잘 돌아감.
}
public void refreshView() {
s_adapter.notifyDataSetChanged();
setList();
}
public class ContentAdapter extends ArrayAdapter<snsData> {
private ArrayList<snsData> items;
public ContentAdapter(Context context, int textViewResourceId,
ArrayList<snsData> items) {
super(context, textViewResourceId, items);
// TODO Auto-generated constructor stub
this.items = items;
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.snscontent, null);
holder = new ViewHolder(v);
v.setTag(holder);
} else
holder = (ViewHolder) v.getTag();
snsData data = items.get(position);
holder.getContent().setText(data.getContent());
holder.getDate().setText(data.getDate());
holder.getNick().setText(data.getNick());
holder.getButton().setTag(Integer.valueOf(position));
holder.getButton().setOnClickListener(delete);
holder.getButton().setVisibility(View.INVISIBLE);
holder.getLayout().setTag(Integer.valueOf(position));
holder.getLayout().setOnClickListener(layout);
return v;
}
}
class ViewHolder {
ViewGroup layout;
View Base;
TextView content;
TextView date;
TextView nick;
Button deleteBtn;
ViewHolder(View base) {
this.Base = base;
}
public ViewGroup getLayout() {
if (layout == null)
layout = (ViewGroup) Base.findViewById(R.id.snsContentLayout);
return layout;
}
public Button getButton() {
if (deleteBtn == null)
deleteBtn = (Button) Base.findViewById(R.id.snsDeleteBtn);
return deleteBtn;
}
public TextView getContent() {
if (content == null)
content = (TextView) Base.findViewById(R.id.snsContent);
return content;
}
public TextView getDate() {
if (date == null)
date = (TextView) Base.findViewById(R.id.snsDate);
return date;
}
public TextView getNick() {
if (nick == null)
nick = (TextView) Base.findViewById(R.id.snsNick);
return nick;
}
}
void progressProcess() {
progress = ProgressDialog
.show(snsView.this, "", "갱신중입니다.", true, false);
Thread thread = new Thread(new Runnable() {
public void run() {
// 처리할 부분
mHandler.sendEmptyMessage(0);
}
});
thread.start();
}
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
progress.dismiss(); // 다이얼로그 삭제
refreshView();
}
};
}