달력

5

« 2024/5 »

  • 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
728x90
반응형

안드로이드 - ListView에 데이터가 없을 떄 setEmptyView()

프로그래밍/Androi
이번엔 리스트뷰에 데이터가 없을 때 "데이터가 없습니다" 라는 메시지를 보여주는 걸 한 번 해볼께요
보통 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
반응형
:
Posted by mapagilove