ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î

Custom ListView (Ä¿½ºÅÒ ¸®½ºÆ®ºä) Footer¸¦ ÀÌ¿ëÇÑ ´õº¸±â ±¸Çö
7³â Àü
¸®½ºÆ®ºäÀÇ ´õº¸±â ±â´É ±¸ÇöÀÔ´Ï´Ù.

Ãß°¡ÀûÀ¸·Î Ä¿½ºÅÒÀ¸·Î ¸¸µé¾ú½À´Ï´Ù. ¼Ò½º¸¦ ¾îµð¼­ ÈÉÃĿ°ÇÁö´Â...±â¾ïÀÌ ¾È³ª... ¸µÅ©¸¦ ¸ø´Þ¾ÆµÓ´Ï´Ù.¤Ð

Ȥ½Ã¶óµµ ÀÚ·á¿¡ ¹®Á¦°¡ Àְųª, »èÁ¦¸¦ ¿äû ȤÀº Ãâó¸¦ ¾Æ½Ã´Â ºÐÀº ´ñ±ÛÀ» ´Þ¾ÆÁֽñ⠹ٶø´Ï´Ù.



Ä¿½ºÅÒ ¸®½ºÆ®ºä + 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>
ÃßõÃßõ : 1156 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
1,286
[Android] webview ssl ¹®Á¦
1,285
[Android] Webview url ¼û±â±â
1,284
[Android] AlarmManager ÀÏÁ¤½Ã°£ À̺¥Æ® ½ÇÇà
1,283
¾Èµå·ÎÀÌµå ¿ÀǼҽº ³¡ÆÇ
1,282
android studio DefaultHttpClient, HttpClient import ¿¡·¯
1,281
[Android] Webview ¸Þ¼Òµå
1,280
¾Èµå·ÎÀ̵å: ¼­ºñ½º Service ¿¹Á¦
1,279
[Android] Effect (¿Àµð¿À¸ðµå) º§¸ðµå, Áøµ¿¸ðµå, ¹«À½¸ðµå½Ã µ¿ÀÛó¸®
1,278
Mediaplayer ·Î ÁöÁ¤µÇ¾îÀÖ´Â º§¼Ò¸® Àç»ýÇϱâ
1,277
Android Intent - ¾Èµå·ÎÀ̵å ÀÎÅÙÆ®
1,276
[Android Intent Useage] ¾Èµå·ÎÀ̵å Intent »ç¿ë ¹æ¹ý
1,275
SharedPreferences¶õ?
1,274
ÀÎÅÙÆ®(Intent)·Î µ¥ÀÌÅÍ Àü´Þ(putExtra, getExtras)
1,273
¾Èµå·ÎÀÌµå ±¸±Û ¾Öµå¸÷ Àü¸é±¤°í ³Ö±â
1,272
¾Èµå·ÎÀÌµå µÚ·Î°¡±â ¹öÆ° ´õºíŬ¸¯Çؼ­ ¾Û Á¾·áÇϱâ
1,271
¾Ë¸²Ã¢ ¶ç¿ì±â(Multi Choice, Single Choice)
1,270
Android SharedPreferences »ç¿ë ¿¹Á¦
1,269
¾Èµå·ÎÀ̵å PHP GET ¹æ½Ä Åë½Å¿¡¼­ ÇÑ±Û ±úÁü(?) ÇØ°á
1,268
¾Èµå·ÎÀÌµå ¾Û ÃÖÃÊ ½ÇÇà½Ã ¹ÙÅÁÈ­¸é¿¡ ¾ÆÀÌÄÜ(Shortcut) »ý¼ºÇϱâ
1,267
ÇöÀç½Ã°£(Local Time) °¡Á®¿À±â
1,266
ÆÄÀÏ »ý¼º ¹× ÀúÀå
1,265
µÚ·Î°¡±â(Back ¹öÆ°) µÎ¹ø ´­·¯ ¾Û Á¾·áÇϱâ
Custom ListView (Ä¿½ºÅÒ ¸®½ºÆ®ºä) Footer¸¦ ÀÌ¿ëÇÑ ´õº¸±â ±¸Çö
1,263
CheckBox(üũ¹Ú½º) À̹ÌÁö º¯°æÇϱâ
1,262
C¼­¹ö¿Í ¼ÒÄÏÅë½Å
1,261
½½¶óÀ̵ù ¸Þ´º - SimpleSideDrawer
1,260
selector·Î ¹öÆ° ¾×¼Ç À̹ÌÁö º¯°æ
1,259
À̹ÌÁö¹öÆ° »çÀÌÁî Á¶Àý
1,258
XmlPullParser °£´ÜÇÑ »ç¿ë¹ý
1,257
¹öÆ°»çÀÌ ¿©¹é ¾ø¾Ö±â
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.