2012. 8. 8. 22:38
안드로이드 - ListView에 데이터가 없을 떄 setEmptyView() 안드로이드 이야기2012. 8. 8. 22:38
728x90
반응형
안드로이드 - ListView에 데이터가 없을 떄 setEmptyView()
프로그래밍/Androi
이번엔 리스트뷰에 데이터가 없을 때 "데이터가 없습니다" 라는 메시지를 보여주는 걸 한 번 해볼께요
보통 ListActivity를 상속받아서 한다고들 하는데요
전 ListActivity를 상속받지 않고 Activity를 상속받은 채 커스텀 리스트 뷰를 사용해서 한 번 해보도록 하겠습니다
[ListviewActivity.java]
이번엔 리스트뷰에 데이터가 없을 때 "데이터가 없습니다" 라는 메시지를 보여주는 걸 한 번 해볼께요
보통 ListActivity를 상속받아서 한다고들 하는데요
전 ListActivity를 상속받지 않고 Activity를 상속받은 채 커스텀 리스트 뷰를 사용해서 한 번 해보도록 하겠습니다
[ListviewActivity.java]
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 |
package com.listview; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class ListviewActivity extends Activity {
ArrayList<string> item;
Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
mContext = getApplicationContext();
ListView list = (ListView)findViewById(R.id.listView1);
TextView empty = (TextView)findViewById(R.id.emptyText);
item = new ArrayList<string>();
for ( int i= 0 ; i< 10 ; i++) {
item.add(i + " 번째 리스트" );
}
CustomAdapter custom_adapter = new CustomAdapter(mContext, R.layout.list, item);
list.setEmptyView(empty);
if (item.size()> 0 ) {
list.setAdapter(custom_adapter);
list.invalidateViews();
} else
empty.setVisibility(View.VISIBLE);
} }
class CustomAdapter extends BaseAdapter {
ArrayList<string> adapter_item;
Context context;
int layout;
ViewHolder holder;
public CustomAdapter(Context mContext, int list, ArrayList<string> item) {
context = mContext;
layout = list;
adapter_item = item;
}
public int getCount() {
return adapter_item.size();
}
public Object getItem( int position) {
return adapter_item.get(position);
}
public long getItemId( int position) {
return position;
}
public View getView( int position, View convertView, ViewGroup parent) {
final int pos = position;
if (convertView == null ) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(layout, parent, false );
holder = new ViewHolder();
holder.text = (TextView)convertView.findViewById(R.id.textView1);
holder.img = (ImageView)convertView.findViewById(R.id.imageView1);
holder.btn = (Button)convertView.findViewById(R.id.button1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(adapter_item.get(position));
holder.img.setImageResource(R.drawable.ic_launcher);
holder.btn.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
adapter_item.remove(pos);
notifyDataSetChanged();
}
});
return convertView;
} }
class ViewHolder {
TextView text;
ImageView img;
Button btn; }</string></string></string></string> |
[main.xml]
1
2
3
4
5
6
7
8
9 |
<?xml version= "1.0" encoding= "utf-8" ?> <linearlayout android:orientation= "vertical" android:layout_height= "fill_parent" android:layout_width= "fill_parent" xmlns:android= "http://schemas.android.com/apk/res/android" >
<listview android:id= "@+id/listView1" android:layout_height= "wrap_content" android:layout_width= "match_parent" >
</listview>
<textview android:id= "@+id/emptyText" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:layout_gravity= "center" android:text= "데이터가 없습니다" > </textview></linearlayout> |
[list.xml]
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
<?xml version= "1.0" encoding= "utf-8" ?> <linearlayout android:orientation= "vertical" android:layout_height= "fill_parent" android:layout_width= "fill_parent" xmlns:android= "http://schemas.android.com/apk/res/android" >
<relativelayout android:id= "@+id/relativeLayout1" android:layout_height= "wrap_content" android:layout_width= "match_parent" android:layout_margin= "4dip" >
<button android:id= "@+id/button1" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:text= "삭제" android:layout_alignParentTop= "true" android:layout_alignParentRight= "true" >
<textview android:id= "@+id/textView1" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:text= "TextView" android:layout_marginLeft= "74dp" android:layout_centerVertical= "true" android:layout_alignParentLeft= "true" >
<imageview android:id= "@+id/imageView1" android:layout_height= "wrap_content" android:layout_width= "wrap_content" android:layout_centerVertical= "true" android:layout_alignParentLeft= "true" android:src= "@drawable/ic_launcher" >
</imageview></textview></button></relativelayout> </linearlayout> |
우선 main.xml 소스를 보면
기본 LinearLayout위에 ListView와 TextView 하나씩이 들어가 있습니다.
저 TextView가 바로 데이터가 없을 때 "데이터가 없습니다" 라는 문구를 표시해주는 놈 입니다.
ListviewActivity.java 에서는
1
2
3
4
5
6
7
8
9
10 |
ListView list = (ListView)findViewById(R.id.listView1);
TextView empty = (TextView)findViewById(R.id.emptyText);
list.setEmptyView(empty);
if (item.size()> 0 ) {
list.setAdapter(custom_adapter);
list.invalidateViews();
} else
empty.setVisibility(View.VISIBLE); |
이 부분 입니다
setEmptyVieW() 라는 메소드를 통해서 empty라는 녀석을 데이터가 없을 때 보여주겠다고 하는 것이구요.
if 조건 절에서 데이터의 크기가 0이면 setVisibility(View.VISIBLE)을 통해서 empty 라는 녀석을 보여주는 것입니다.
위의 두 이미지 처럼 버튼을 통해서 리스트를 하나씩 삭제 해 나가다 보면 데이터가 없을 떄
요 녀석을 만날 수 있게 됩니다.
728x90
반응형
'안드로이드 이야기' 카테고리의 다른 글
안드로이드 - 카메라에 이미지 떠다니기 (0) | 2012.08.10 |
---|---|
안드로이드 - 사진, 갤러리 Image Crop 후 MMS 전송 하기 (0) | 2012.08.10 |
안드로이드- SDCARD에 저장 (0) | 2012.08.06 |
안드로이드 - 촬영한 이미지를 getFilesDir()에도 저장하기 (0) | 2012.07.29 |
안드로이드 - Drawable 이미지를 저장 (0) | 2012.07.29 |