 |
|
|  |
Custom ListView (Ä¿½ºÅÒ ¸®½ºÆ®ºä) Footer¸¦ ÀÌ¿ëÇÑ ´õº¸±â ±¸Çö |
|
|
 |
8³â Àü |
¸®½ºÆ®ºäÀÇ ´õº¸±â ±â´É ±¸ÇöÀÔ´Ï´Ù.
Ãß°¡ÀûÀ¸·Î Ä¿½ºÅÒÀ¸·Î ¸¸µé¾ú½À´Ï´Ù. ¼Ò½º¸¦ ¾îµð¼ ÈÉÃĿ°ÇÁö´Â...±â¾ïÀÌ ¾È³ª... ¸µÅ©¸¦ ¸ø´Þ¾ÆµÓ´Ï´Ù.¤Ð
Ȥ½Ã¶óµµ ÀÚ·á¿¡ ¹®Á¦°¡ Àְųª, »èÁ¦¸¦ ¿äû ȤÀº Ãâó¸¦ ¾Æ½Ã´Â ºÐÀº ´ñ±ÛÀ» ´Þ¾ÆÁֽñ⠹ٶø´Ï´Ù.
Ä¿½ºÅÒ ¸®½ºÆ®ºä + footer¸¦ ÀÌ¿ëÇÑ ´õº¸±â ±¸Çö (»ùÇüҽº ´Ù¿î·Îµå ¹× ½ºÅ©¸°¼¦Àº ¼Ò½º Çϴܺο¡ ÀÖ½À´Ï´Ù.)
MainActivity.java
package com.example.morelistview;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnScrollListener
{
private ArrayList marItem;
private MyListAdapter mMyAdapte;
private ListView mListView;
private MyItem items;
// ½ºÅ©·Ñ ·Îµù
private LayoutInflater mInflater;
private boolean mLockListView;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView)findViewById(R.id.moreList);
marItem = new ArrayList();
mLockListView = true;
// ǪÅ͸¦ µî·Ï. setAdapter ÀÌÀü¿¡ ÇؾßÇÔ.
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mListView.addFooterView(mInflater.inflate(R.layout.listview_footer, null));
// ½ºÅ©·Ñ ¸®½º³Ê µî·Ï
mListView.setOnScrollListener(this);
mMyAdapte = new MyListAdapter(this, R.layout.custom_layout, marItem);
mListView.setAdapter(mMyAdapte);
// Àӽà µ¥ÀÌÅÍ µî·Ï
addItems(10);
}
// dialog
private void btnDialog(final Activity _activity, String msg, final boolean _slct, final String _slctCustId)
{
AlertDialog.Builder alt_bld = new AlertDialog.Builder(_activity);
alt_bld.setMessage(msg).setCancelable(false)
.setPositiveButton("È®ÀÎ", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
if(_slct)
{
Toast.makeText(MainActivity.this, "È®ÀÎ", 1).show();
}
else if(!_slct)
{
Toast.makeText(MainActivity.this, "Ãë¼Ò", 1).show();
}
}
})
.setNegativeButton("Ãë¼Ò", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
}
});
AlertDialog alert = alt_bld.create();
alert.show();
}
// ¸®½ºÆ®ºä Ãâ·Â Ç׸ñ
class MyItem
{
MyItem(String _coustId)
{
sCustId = _coustId;
}
String sCustId;
}
// ¾î´ðÅÍ Å¬·¡½º
class MyListAdapter extends BaseAdapter
{
Context cContext;
LayoutInflater lInflater;
ArrayList alSrc;
int layout;
public MyListAdapter(Context _context, int _layout, ArrayList _arrayList)
{
cContext = _context;
lInflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
alSrc = _arrayList;
layout = _layout;
}
@Override
public int getCount()
{
return alSrc.size();
}
@Override
public Object getItem(int position)
{
return alSrc.get(position).sCustId;
}
@Override
public long getItemId(int position)
{
return position;
}
// °¢ ºäÀÇ Ç׸ñ »ý¼º
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final int pos = position;
if(convertView == null)
{
convertView = lInflater.inflate(layout, parent, false);
}
final String getCustId = alSrc.get(pos).sCustId;
TextView tvCustId = (TextView)convertView.findViewById(R.id.tvCoustId);
tvCustId.setText(alSrc.get(position).sCustId);
Button btSending = (Button)convertView.findViewById(R.id.sendBtn);
btSending.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
btnDialog(MainActivity.this, "Àü¼Û", true, getCustId);
}
});
// »èÁ¦¹öÆ°
Button deleteBtn = (Button)convertView.findViewById(R.id.deleteBtn);
deleteBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
btnDialog(MainActivity.this, "»èÁ¦", false, getCustId);
}
});
return convertView;
}
}
// ´õ¹Ì ¾ÆÀÌÅÛ Ãß°¡
private void addItems(final int size)
{
// ¾ÆÀÌÅÛÀ» Ãß°¡ÇÏ´Â µ¿¾È Áߺ¹ ¿äûÀ» ¹æÁöÇϱâ À§ÇØ ¶ôÀ» °É¾îµÓ´Ï´Ù.
mLockListView = true;
Runnable run = new Runnable()
{
@Override
public void run()
{
for(int i = 0 ; i < size ; i++)
{
items = new MyItem("more " + i);
marItem.add(items);
}
// ¸ðµç µ¥ÀÌÅ͸¦ ·ÎµåÇÏ¿© Àû¿ëÇÏ¿´´Ù¸é ¾î´ðÅÍ¿¡ ¾Ë¸®°í
// ¸®½ºÆ®ºäÀÇ ¶ôÀ» ÇØÁ¦ÇÕ´Ï´Ù.
mMyAdapte.notifyDataSetChanged();
mLockListView = false;
}
};
// ¼ÓµµÀÇ µô·¹À̸¦ ±¸ÇöÇϱâ À§ÇÑ ²Ä¼ö
Handler handler = new Handler();
handler.postDelayed(run, 1000);
}
public void onBtnClickBackBtn(View _view)
{
finish();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
// ÇöÀç °¡Àå óÀ½¿¡ º¸ÀÌ´Â ¼¿¹øÈ£¿Í º¸¿©Áö´Â ¼¿¹øÈ£¸¦ ´õÇÑ°ªÀÌ
// ÀüüÀÇ ¼ýÀÚ¿Í µ¿ÀÏÇØÁö¸é °¡Àå ¾Æ·¡·Î ½ºÅ©·Ñ µÇ¾ú´Ù°í °¡Á¤ÇÕ´Ï´Ù.
int count = totalItemCount - visibleItemCount;
if(firstVisibleItem >= count && totalItemCount != 0 && mLockListView == false)
{
Log.i("list", "Loading next items");
addItems(10);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState)
{
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/moreList"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ListView>
</LinearLayout>
custom_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/tvCoustId"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="6"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/sendBtn"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="È®ÀÎ" />
<Button
android:id="@+id/deleteBtn"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Ãë¼Ò" />
</LinearLayout>
listview_footer.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<ImageView
android:id="@+id/iv_list_footer_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_list_footer"
android:layout_width="wrap_content"
android:layout_height="50dip"
android:layout_marginLeft="10dip"
android:gravity="center"
android:text="More item ..."
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
|
|
̵̧ : 1233 |
̵̧
¸ñ·Ï
|
|
|  |
|