精华内容
下载资源
问答
  • 比如我有个表,有2个字段,name ,班级 一个下拉列表从数据库读出班级的所有数据, 另一个下拉列表的数据根据班级读 出所有的name。 这个怎么
  • 怎样获取下拉列表框的值

    千次阅读 2007-12-10 11:31:00
    昨天一张网页,其中有一项要判断下拉列表框的值,弄了好久硬是没有出来,郁闷了好长一段时间!不过还好,今早终于把它给解决了,现在写出来与大家分享。下拉莱单代码如下:Please Select:chinaAlbania在这个表单...

    昨天做一张网页,其中有一项要判断下拉列表框的值,弄了好久硬是没有做出来,郁闷了好长一段时间!不过还好,今早终于把它给解决了,现在写出来与大家分享。

    下拉莱单代码如下:
    <form action="?action=add" method="post" name="form1" onSubmit="return check()">
    <Select id=country name=country>
    <OPTION value="" selected>Please Select:</OPTION>
    <OPTION value=Afghanistan>china</OPTION>
    <OPTION value=Albania>Albania</OPTION>
    </Select>
    </form>

    在这个表单中,国家这一项是必选项,所以我所要做的就要判断下拉列表框的值是否为空,如果为空就不让提交表单,让其再选择。

    判断代码如下:
    <script language="JavaScript" type="text/javascript">
    <!--
    function check(){
    if(form1.country.options[form1.country.selectedIndex].value=="") {
    alert('Please select your country!');
       return false;
      }
    }
    </script>  
    到此,我们所要做的事情就完成了。这个判断就这么的简单,当时我就是少了这个selectedIndex,以为与其它判断方法一样,所以造就了这个错误,浪费了一大堆时间!
    希望有与我犯一样错误的人看过后能及时改过来。还不会的,看过后立马就会^_^ 
     

    转自:http://www.zjidea.com/blog/article.asp?id=32

    展开全文
  • 请问在jsp页面怎样实现类似google搜索的下拉列表效率高? 现在我的做法是从数据库中首先检索出所有的数据,然后通过js把满足输入框中输入的内容的数据依次添加到下拉列表 现在有接近一万条数据,效率非常低,通常...
  • 以前项目一听到级联下拉列表就头疼,现在有了ajax问题就好解决了,现在我用seam来表演一下它是怎样解决问题的,同时也为刚入门的朋友提供一些捷径,抛砖引玉,大家互相学习。首先下载最新的seam,版本2.0.1GA,...

    最近学习Seam,做了一个小例子 。

    以前做项目一听到级联下拉列表就头疼,现在有了ajax问题就好解决了,现在我用seam来表演一下它是怎样解决问题的,同时也为刚入门的朋友提供一些捷径,抛砖引玉,大家互相学习。

    首先下载最新的seam,版本2.0.1GA,仅仅是0.01的升级,2.01也比2.0的易用性有所提高,seam gen就是个例子。还有要安装jboss4.2或以上版本,就不多说了。

    希望你先从seam reference了解了什么是seam gen,然后就可以开始我们的代码生成之旅了。

    准备好mysql数据库,新建一个叫bet_team数据库,或者说schema吧。

    来到seam2.0.1GA解压目录,我就管它叫<seam-root>吧,进入<seam-root>/seam-gen/lib,吧mysql jdbc driver包放在这里。

    然后打开cmd,到<seam-root>,输入seam setup

    依照提示一步一步输入,seam reference有介绍,也不多说了。重要的是设置好自己的jdbc。

    success了吧?输入seam create-project

    于是你的基本project就这样建好了,下载我给你准备的bet例子吧 http://download.csdn.net/source/356840

    呵呵,这里说一下,因为我喜欢看球,有时候有玩一下单场彩,级联下拉列表的结构也是从这里来的,有3个表,是国家,联赛,球队,country,league,team,简单吧?英格兰->英超->曼联,意大利->意甲->罗马,就是这样级联的结构。

    好了,打开我给你的例子文件,里面只有src和view目录,直接覆盖到刚才生成的project相应的地方吧。

    继续是seam gen,输入seam generate-ui

    就这样seam为你生成了三个表的crud功能。

    一些配置文件可能需要改一下的,在你的project里面找到persistence-dev.xml,找到property name="hibernate.hbm2ddl.auto",value改为create或create-drop,这样表结构会在deploy的时候自动装入。还有components.xml文件里的concurrent-request-timeout="500",机器慢的朋友可能要设大一点,大方点给5000吧。

    继续输入seam explode

    好了,你的project被deploy到你刚才输入的jboss里了,如果你输错了可别怪我哦。

    大功告成了,赶快打开你的jboss看看效果吧,我的project名称叫bet,所以url就是http://localhost:8080/bet,看到主界面了吧?添删改查操作都有了哦,动手加入国家和联赛吧,球队留着让我的界面来加吧。如果出现jboss报jdbc找不到driver,也在jboss server/default/lib的目录下放一个mysql jdbc driver。

    输入url http://localhost:8080/bet/team/teaming.seam 有点丑别见怪,但它的功能是不错的吧。

    接着你可以用eclipse导入这个project来看,build.xml是你继续发布和整理的重要工具。

    一路下来希望你能顺顺利利地看到最终的效果,我没有讲解我的代码,不过seam reference是更好的教材,seam的examples也提供了更多的示例。仅希望这次代码之旅能够让你认识seam,进入seam的世界。

    展开全文
  • 下拉列表中传递多个值

    千次阅读 2003-07-23 22:29:00
    一个下拉列表有许多项,当选择其中某一项时,可以给后一页传递两个参数,该怎么?比如:我在下拉列表选了“国内新闻”这一项,执行FORM后向后页传递两个参数:type="国内新闻",class="2"。在下拉列表选了“国外...

     

     

    一个下拉列表有许多项,当选择其中某一项时,可以给后一页传递两个参数,该怎么做?
    比如:
    我在下拉列表选了“国内新闻”这一项,执行FORM后向后页传递两个参数:type="国内新闻",class="2"。
    在下拉列表选了“国外新闻”这一项,执行FORM后向后页传递两个参数:type="国外新闻",class="3"。
    这该怎么做?

    我知道二级联动可以实现,但如果不用二级联动,怎样解决这个问题?

     

     

     

     

    form.htm
    ---------------------------------------------------------
    <form name="form1" method="post" action="to.asp">
    <select size="1" name="new" ID="Select" οnchange="javaScript:document.form1.submit();">
    <option selected value="国内新闻,2">国内新闻</option>
    <option value="国外新闻,3">国外新闻</option>
    </select>
    </form>
    ---------------------------------------------------------

    to.asp
    --------------------------------------------------------
    <%
    new=split(request.form("new"),",",2)
    Response.Write "type=" & new(1) & ",class=" & new(2)
    %>
    --------------------------------------------------------

    form.htm里下拉列表传值是传一个值,但值里是用‘,’号分隔的两组数据。
    to.asp里是将传来的值分解开成new数组,两个数据new(1),new(2)

     

     

     

     

     

     


    近来问连动下拉列表的人很多,我就自己做了一个,自己暂时不用,完全是给大家分享的,数据库结构采用常见的省份和城市,数据库结构结构来自csdn某文章,大家可以自己改。有什么意见请提出来,要代码文件和数据库请开贴放分并且留下email。
    本文完全VBS制作,结交VBS高手,我用VBS能做出Javascript能做的一切QQ:28963147,email:panyuguang962@sohu.com

    Access数据库
    ●     数据库名:DB_ProvinceCat
    ●     表名:1)Tb_Province     2)Tb_City
    说明:表Tb_Province用来存放省份名称;表Tb_City用来存放相应的城市名称。
    ●     字段名的设计
    1)  表Tb_Province的字段有省份ID号(ProvinceCatID)、省份代码(ProvinceCode)、省份名称(ProvinceName),表1给出了示例:
    ProvinceCatID    ProvinceCode     ProvinceName
    1                 01          北京市
    2                 02          上海市
    3                 03          天津市
    4                 04          重庆市
    5                 05          广东省
    6                 06          浙江省
    7                 07          福建省
    8                 08          海南省
    9                 09          江苏省
    表1
    2)  表Tb_City的字段有城市ID号(CityID)、城市代码(CityCode)、城市名称(CityName),表2给出了示例:

    CityID      CityCode     CityName
    1           01001       北京市
    2           02001       上海市
    3           03001       天津市
    4           04001       重庆市
    5           05001       广州市
    6           05002       深圳市
    7           05003       珠海市
    8           05004       茂名市
    9           05005       中山市
    10          06001       杭州市
    11          06002       温州市
    12          07001       福州市
    13          07002       厦门市
    14          08001       海口市
    15          08002       三亚市
    16          08003       万宁市
    17          08004       五指山市
    18          09001       南京市
    19          09002       苏州市

    表2

    说明:这里要注意的一点就是,身份代码要对应城市代码的头两位,数据库尽量不要出现有父亲没儿子的事情。
    文件:TwoSelect.asp经简单测试好用!
    <HTML>
    <HEAD>
    <META name=VI60_defaultClientScript content=VBScript>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

    </HEAD>
    <BODY>
    <%
    Dim Cn,Rs
    Dim SQL,StrDSN
    Dim MyArray()
    Set cn=Server.CreateObject("ADODB.connection")
    Set Rs = Server.CreateObject("ADODB.Recordset")
    StrDSN = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("DB_ProvinceCat.mdb")
    Cn.Open strDSN
    SQL="select * from Tb_Province order by ProvinceCatID"
    Rs.Open SQL,cn,3,2
    Rs.MoveFirst
    redim MyArray(Rs.RecordCount-1)
    %>
    <table width="273" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td width="96"> <SELECT id=select1 style="WIDTH: 96px" name=select1>
            <OPTION selected value=select<%=Rs("ProvinceCode")%>><%=Rs("ProvinceName")%></OPTION>
            <%
           MyArray(0)=Rs("ProvinceCode")
          Rs.MoveNext
          for i=1 to Rs.RecordCount-1
          %>
            <OPTION  value=select<%=Rs("ProvinceCode")%>><%=Rs("ProvinceName")%></OPTION>
            <%
          MyArray(i)=Rs("ProvinceCode")
          Rs.MoveNext
           next
          %>
          </SELECT>
          <%
          Rs.Close
          %>
        </td>
        <td width="96">
          <%
          for i=0 to ubound( MyArray)
           SQL="select * from Tb_City  where CityCode like '" &  MyArray(i) & "%'"
           'Response.End
           Rs.Open SQL,cn,3,2
           if Rs.RecordCount >0 then
             Rs.MoveFirst
          %>
          <SELECT id=select<%=MyArray(i)%> style="WIDTH: 96px;display='none'" name=select<%=MyArray(i)%>>
            <%do while not Rs.EOF %>
            <OPTION  value="<%=Rs("CityName")%>"><%=Rs("CityName")%></OPTION>
            <%
          Rs.MoveNext
          loop
          %>
          </SELECT>
          <%
     end if
     Rs.Close
    next
    %>
    <SCRIPT  LANGUAGE=vbscript>
    <!--

    dim Province,City
    dim obj,lastObj
    lastObj="select01"
    obj="select01"
    window.execScript "select01.style.display='block'" ,"vbs"
    Province="北京市"
    City="北京市"
    Sub select1_onchange
     obj=select1.value 
     if obj<>lastObj and isobject(eval(obj)) then 
      window.execScript Obj & ".style.display='block'" ,"vbs"
      window.execScript  lastObj & ".style.display='none'" ,"vbs" 
      Province=select1.options(select1.selectedIndex).innertext
      window.execScript "City=" & Obj & ".value" ,"vbs"
      lastObj=select1.value    
     end if  
    End Sub
    sub SubMe()
     window.execScript "City=" & Obj & ".value" ,"vbs"
     window.location.href="TwoSelect.asp?Province=" & Province & "&City=" & City
    End Sub
    -->
    </SCRIPT>
        </td>
        <td width="81"><input type="button" name="Submit" value="按钮" onClick="vbs:SubMe"></td>
      </tr>
    </table>
    </BODY>


    </HTML>

     

     

     

     

    展开全文
  • Android 自定义下拉刷新ExpandableListView

    千次阅读 2015-08-01 09:31:54
    自定义下拉刷新ExpandableListView,在本文的demo中的是好友分组列表,可以通过下拉刷新数据。自定义控件是继承了ExpandableListView这个类,接口就是OnScrollListener这样来实现的。接下看看怎样调用这个自定义...

    自定义下拉刷新ExpandableListView,在本文的demo中做的是好友分组列表,可以通过下拉刷新数据。自定义控件是继承了ExpandableListView这个类,接口就是OnScrollListener这样来实现的。接下看看怎样调用这个自定义控件。先看效果图。

    本文源码下载:点击

    一、实现的效果图


    二、看自定义控制类XExpandableListView

    package com.org.xlistview;
    import com.example.pullrefresh.R;
    import com.example.pullrefresh.TimeUtil;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.ViewTreeObserver.OnGlobalLayoutListener;
    import android.view.animation.DecelerateInterpolator;
    import android.widget.AbsListView;
    import android.widget.AbsListView.OnScrollListener;
    import android.widget.ExpandableListView;
    import android.widget.ListAdapter;
    import android.widget.RelativeLayout;
    import android.widget.Scroller;
    import android.widget.TextView;
    
    public class XExpandableListView extends ExpandableListView implements
    		OnScrollListener {
    
    	private float mLastY = -1; // save event y
    	private Scroller mScroller; // used for scroll back
    	private OnScrollListener mScrollListener; // user's scroll listener
    
    	// the interface to trigger refresh and load more.
    	private IXListViewListener mListViewListener;
    
    	// -- header view
    	private XListViewHeader mHeaderView;
    	// header view content, use it to calculate the Header's height. And hide it
    	// when disable pull refresh.
    	private RelativeLayout mHeaderViewContent;
    	private TextView mHeaderTimeView;
    	private int mHeaderViewHeight; // header view's height
    	private boolean mEnablePullRefresh = true;//
    	private boolean mPullRefreshing = false; // is refreashing.
    
    	// -- footer view
    	private XListViewFooter mFooterView;
    	private boolean mEnablePullLoad;
    	private boolean mPullLoading;
    	private boolean mIsFooterReady = false;
    
    	// total list items, used to detect is at the bottom of listview.
    	private int mTotalItemCount;
    
    	// for mScroller, scroll back from header or footer.
    	private int mScrollBack;
    	private final static int SCROLLBACK_HEADER = 0;
    	private final static int SCROLLBACK_FOOTER = 1;
    
    	private final static int SCROLL_DURATION = 400; // scroll back duration
    	private final static int PULL_LOAD_MORE_DELTA = 50; // when pull up >= 50px
    														// at bottom, trigger
    														// load more.
    	private final static float OFFSET_RADIO = 1.8f; // support iOS like pull
    													// feature.
    
    	/**
    	 * @param context
    	 */
    	public XExpandableListView(Context context) {
    		super(context);
    		initWithContext(context);
    	}
    
    	public XExpandableListView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		initWithContext(context);
    	}
    
    	public XExpandableListView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		initWithContext(context);
    	}
    
    	private void initWithContext(Context context) {
    		mScroller = new Scroller(context, new DecelerateInterpolator());
    		// XListView need the scroll event, and it will dispatch the event to
    		// user's listener (as a proxy).
    		super.setOnScrollListener(this);
    
    		// init header view
    		mHeaderView = new XListViewHeader(context);
    		mHeaderViewContent = (RelativeLayout) mHeaderView
    				.findViewById(R.id.xlistview_header_content);
    		mHeaderTimeView = (TextView) mHeaderView
    				.findViewById(R.id.xlistview_header_time);
    		addHeaderView(mHeaderView);
    
    		// init footer view
    		mFooterView = new XListViewFooter(context);
    
    		// init header height
    		mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
    				new OnGlobalLayoutListener() {
    					@Override
    					public void onGlobalLayout() {
    						mHeaderViewHeight = mHeaderViewContent.getHeight();
    						getViewTreeObserver()
    								.removeGlobalOnLayoutListener(this);
    					}
    				});
    	}
    
    	@Override
    	public void setAdapter(ListAdapter adapter) {
    		// make sure XListViewFooter is the last footer view, and only add once.
    		if (mIsFooterReady == false) {
    			mIsFooterReady = true;
    			addFooterView(mFooterView);
    		}
    		super.setAdapter(adapter);
    	}
    
    	/**
    	 * enable or disable pull down refresh feature.
    	 * 
    	 * @param enable
    	 */
    	public void setPullRefreshEnable(boolean enable) {
    		mEnablePullRefresh = enable;
    		if (!mEnablePullRefresh) { // disable, hide the content
    			mHeaderViewContent.setVisibility(View.INVISIBLE);
    		} else {
    			mHeaderViewContent.setVisibility(View.VISIBLE);
    		}
    	}
    
    	/**
    	 * enable or disable pull up load more feature.
    	 * 
    	 * @param enable
    	 */
    	public void setPullLoadEnable(boolean enable) {
    		mEnablePullLoad = enable;
    		if (!mEnablePullLoad) {
    			mFooterView.hide();
    			mFooterView.setOnClickListener(null);
    		} else {
    			mPullLoading = false;
    			mFooterView.show();
    			mFooterView.setState(XListViewFooter.STATE_NORMAL);
    			// both "pull up" and "click" will invoke load more.
    			mFooterView.setOnClickListener(new OnClickListener() {
    				@Override
    				public void onClick(View v) {
    					startLoadMore();
    				}
    			});
    		}
    	}
    
    	/**
    	 * stop refresh, reset header view.
    	 */
    	public void stopRefresh() {
    		if (mPullRefreshing == true) {
    			mPullRefreshing = false;
    			resetHeaderHeight();
    		}
    	}
    
    	/**
    	 * stop load more, reset footer view.
    	 */
    	public void stopLoadMore() {
    		if (mPullLoading == true) {
    			mPullLoading = false;
    			mFooterView.setState(XListViewFooter.STATE_NORMAL);
    		}
    	}
    
    	/**
    	 * set last refresh time
    	 * 
    	 * @param time
    	 */
    	public void setRefreshTime(String time) {
    		mHeaderTimeView.setText(time);
    	}
    	
    	public void setRefreshTime(long time){
    		mHeaderTimeView.setText(TimeUtil.getChatTime(time));
    	}
    
    	private void invokeOnScrolling() {
    		if (mScrollListener instanceof OnXScrollListener) {
    			OnXScrollListener l = (OnXScrollListener) mScrollListener;
    			l.onXScrolling(this);
    		}
    	}
    
    	private void updateHeaderHeight(float delta) {
    		mHeaderView.setVisiableHeight((int) delta
    				+ mHeaderView.getVisiableHeight());
    		if (mEnablePullRefresh && !mPullRefreshing) { // 未处于刷新状态,更新箭头
    			if (mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
    				mHeaderView.setState(XListViewHeader.STATE_READY);
    			} else {
    				mHeaderView.setState(XListViewHeader.STATE_NORMAL);
    			}
    		}
    		setSelection(0); // scroll to top each time
    	}
    
    	/**
    	 * reset header view's height.
    	 */
    	private void resetHeaderHeight() {
    		int height = mHeaderView.getVisiableHeight();
    		if (height == 0) // not visible.
    			return;
    		// refreshing and header isn't shown fully. do nothing.
    		if (mPullRefreshing && height <= mHeaderViewHeight) {
    			return;
    		}
    		int finalHeight = 0; // default: scroll back to dismiss header.
    		// is refreshing, just scroll back to show all the header.
    		if (mPullRefreshing && height > mHeaderViewHeight) {
    			finalHeight = mHeaderViewHeight;
    		}
    		mScrollBack = SCROLLBACK_HEADER;
    		mScroller.startScroll(0, height, 0, finalHeight - height,
    				SCROLL_DURATION);
    		// trigger computeScroll
    		invalidate();
    	}
    
    	private void updateFooterHeight(float delta) {
    		int height = mFooterView.getBottomMargin() + (int) delta;
    		if (mEnablePullLoad && !mPullLoading) {
    			if (height > PULL_LOAD_MORE_DELTA) { // height enough to invoke load
    													// more.
    				mFooterView.setState(XListViewFooter.STATE_READY);
    			} else {
    				mFooterView.setState(XListViewFooter.STATE_NORMAL);
    			}
    		}
    		mFooterView.setBottomMargin(height);
    
    		// setSelection(mTotalItemCount - 1); // scroll to bottom
    	}
    
    	private void resetFooterHeight() {
    		int bottomMargin = mFooterView.getBottomMargin();
    		if (bottomMargin > 0) {
    			mScrollBack = SCROLLBACK_FOOTER;
    			mScroller.startScroll(0, bottomMargin, 0, -bottomMargin,
    					SCROLL_DURATION);
    			invalidate();
    		}
    	}
    
    	private void startLoadMore() {
    		mPullLoading = true;
    		mFooterView.setState(XListViewFooter.STATE_LOADING);
    		if (mListViewListener != null) {
    			mListViewListener.onLoadMore();
    		}
    	}
    
    	@Override
    	public boolean onTouchEvent(MotionEvent ev) {
    		if (mLastY == -1) {
    			mLastY = ev.getRawY();
    		}
    
    		switch (ev.getAction()) {
    		case MotionEvent.ACTION_DOWN:
    			mLastY = ev.getRawY();
    			break;
    		case MotionEvent.ACTION_MOVE:
    			final float deltaY = ev.getRawY() - mLastY;
    			mLastY = ev.getRawY();
    			if (getFirstVisiblePosition() == 0
    					&& (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) {
    				// the first item is showing, header has shown or pull down.
    				updateHeaderHeight(deltaY / OFFSET_RADIO);
    				invokeOnScrolling();
    			} else if (getLastVisiblePosition() == mTotalItemCount - 1
    					&& (mFooterView.getBottomMargin() > 0 || deltaY < 0)) {
    				// last item, already pulled up or want to pull up.
    				updateFooterHeight(-deltaY / OFFSET_RADIO);
    			}
    			break;
    		default:
    			mLastY = -1; // reset
    			if (getFirstVisiblePosition() == 0) {
    				// invoke refresh
    				if (mEnablePullRefresh
    						&& mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
    					mPullRefreshing = true;
    					mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
    					if (mListViewListener != null) {
    						mListViewListener.onRefresh();
    					}
    				}
    				resetHeaderHeight();
    			} else if (getLastVisiblePosition() == mTotalItemCount - 1) {
    				// invoke load more.
    				if (mEnablePullLoad
    						&& mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
    					startLoadMore();
    				}
    				resetFooterHeight();
    			}
    			break;
    		}
    		return super.onTouchEvent(ev);
    	}
    
    	@Override
    	public void computeScroll() {
    		if (mScroller.computeScrollOffset()) {
    			if (mScrollBack == SCROLLBACK_HEADER) {
    				mHeaderView.setVisiableHeight(mScroller.getCurrY());
    			} else {
    				mFooterView.setBottomMargin(mScroller.getCurrY());
    			}
    			postInvalidate();
    			invokeOnScrolling();
    		}
    		super.computeScroll();
    	}
    
    	@Override
    	public void setOnScrollListener(OnScrollListener l) {
    		mScrollListener = l;
    	}
    
    	@Override
    	public void onScrollStateChanged(AbsListView view, int scrollState) {
    		if (mScrollListener != null) {
    			mScrollListener.onScrollStateChanged(view, scrollState);
    		}
    	}
    
    	@Override
    	public void onScroll(AbsListView view, int firstVisibleItem,
    			int visibleItemCount, int totalItemCount) {
    		// send to user's listener
    		mTotalItemCount = totalItemCount;
    		if (mScrollListener != null) {
    			mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount,
    					totalItemCount);
    		}
    	}
    
    	public void setXListViewListener(IXListViewListener l) {
    		mListViewListener = l;
    	}
    
    	/**
    	 * you can listen ListView.OnScrollListener or this one. it will invoke
    	 * onXScrolling when header/footer scroll back.
    	 */
    	public interface OnXScrollListener extends OnScrollListener {
    		public void onXScrolling(View view);
    	}
    
    	/**
    	 * implements this interface to get refresh/load more event.
    	 */
    	public interface IXListViewListener {
    		public void onRefresh();
    
    		public void onLoadMore();
    	}
    }
    
    三、根据自定义控件的适配器MyListAdapter

    package com.example.pullrefresh;
    
    import java.util.List;
    import java.util.Map;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnLongClickListener;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MyListAdapter extends BaseExpandableListAdapter {
    	
    	private List<String> mGroup;// 组名
    	private Map<Integer, List<User>> mChildren;// 每一组对应的child
    	private LayoutInflater mInflater;
    	private Context mContext;
    
    	public MyListAdapter(Context context,List<String> group,Map<Integer, List<User>> children) {
    		this.mInflater = LayoutInflater.from(context);
    		this.mGroup = group;
    		this.mChildren = children;
    		this.mContext = context;
    	}
    
    	public void addUser(User u) {
    		int groupId = u.getGroup();
    		if (groupId < mGroup.size()) {
    			mChildren.get(groupId).add(u);
    			notifyDataSetChanged();// 更新一下
    		}
    	}
    
    	public Object getChild(int groupPosition, int childPosition) {
    		return mChildren.get(groupPosition).get(childPosition);
    	}
    
    	public long getChildId(int groupPosition, int childPosition) {
    		return childPosition;
    	}
    
    	public int getChildrenCount(int groupPosition) {
    		return mChildren.get(groupPosition).size();
    	}
    
    	public View getChildView(int groupPosition, int childPosition,
    			boolean isLastChild, View convertView, ViewGroup parent) {
    		ViewHolder vHolder = null;
    		if (convertView == null) {
    			convertView = mInflater.inflate(R.layout.contact_list_item_for_buddy, null);
    			vHolder = new ViewHolder();
    			vHolder.nick = (TextView) convertView.findViewById(R.id.contact_list_item_name);
    			vHolder.head = (ImageView) convertView.findViewById(R.id.icon);			
    			convertView.setTag(vHolder);
    		}else {
    			vHolder = (ViewHolder) convertView.getTag();
    		}
    		
    		final User u = (User) getChild(groupPosition, childPosition);
    		vHolder.nick.setText(u.getNick());
    		vHolder.head.setImageResource(u.getHeadIcon());
    		
    		convertView.setOnClickListener(new android.view.View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				
    				//每一项单击事件
    				Intent intent = new Intent();
    				intent.setClass(mContext, OtherActivity.class);
    				Bundle bundle = new Bundle();
    				bundle.putInt("headImage", u.getHeadIcon());
    				bundle.putString("userName", u.getNick());
    				intent.putExtras(bundle);
    				mContext.startActivity(intent);
    			}
    		});
    		
    		convertView.setOnLongClickListener(new OnLongClickListener() {
    
    			@Override
    			public boolean onLongClick(View v) {
    				new AlertDialog.Builder(mContext)
    						.setMessage("确定删除 " + u.getNick()+" 吗?")
    						.setPositiveButton(android.R.string.ok,
    								new OnClickListener() {
    									@Override
    									public void onClick(DialogInterface dialog,int which) {
    										//长按删除事件
    									}
    								})
    						.setNegativeButton(android.R.string.cancel, null)
    						.create().show();
    				return false;
    			}
    		});
    		return convertView;
    	}
    	
    	class ViewHolder{
    		public TextView nick;
    		public ImageView head;
    	}
    
    	public Object getGroup(int groupPosition) {
    		return mGroup.get(groupPosition);
    	}
    
    	public int getGroupCount() {
    		return mGroup.size();
    	}
    
    	public long getGroupId(int groupPosition) {
    		return groupPosition;
    	}
    
    	/**
    	 * create group view and bind data to view
    	 */
    	public View getGroupView(int groupPosition, boolean isExpanded,
    			View convertView, ViewGroup parent) {
    		if (convertView == null) {
    			convertView = mInflater.inflate(
    					R.layout.contact_buddy_list_group, null);
    		}
    		TextView groupName = (TextView) convertView.findViewById(R.id.group_name);
    		groupName.setText(getGroup(groupPosition).toString());
    		TextView onlineNum = (TextView) convertView.findViewById(R.id.online_count);
    		
    		onlineNum.setText(getChildrenCount(groupPosition) + "/"+ getChildrenCount(groupPosition));
    		
    		ImageView indicator = (ImageView) convertView.findViewById(R.id.group_indicator);
    		if (isExpanded)
    			indicator.setImageResource(R.drawable.indicator_expanded);
    		else
    			indicator.setImageResource(R.drawable.indicator_unexpanded);
    		return convertView;
    	}
    
    	public boolean isChildSelectable(int groupPosition, int childPosition) {
    		return true;
    	}
    
    	public boolean hasStableIds() {
    		return true;
    	}
    }
    
    四、怎样调用适配器,以及数据源的传入,下拉刷新的接口。

    package com.example.pullrefresh;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import com.org.xlistview.XExpandableListView;
    import com.org.xlistview.XExpandableListView.IXListViewListener;
    import android.os.Bundle;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    
    public class MainActivity extends Activity {
    
    	private XExpandableListView mxListView;  //自定义控件
    	private MyListAdapter mAdapter;   //适配器
    	private List<String> mGroup;// 组名
    	private Map<Integer, List<User>> mChildren;// 每一组对应的child
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		initUI();
    	}
    
    	private void initUI() {
    		//关联控件的id
    		mxListView = (XExpandableListView) findViewById(R.id.friend_xlistview);
    
    		mxListView.setGroupIndicator(null);
    		mxListView.setPullLoadEnable(false);// 禁止下拉加载更多
    		mxListView.setXListViewListener(new IXListViewListener() {
    			
    			@Override
    			public void onRefresh() {
    				//设置显示刷新的提示
    				initUserData1();     //测试下拉刷新的数据
    				mxListView.setAdapter(mAdapter);
    				mxListView.stopRefresh();
    				mxListView.setRefreshTime(System.currentTimeMillis());			
    			}
    			
    			@Override
    			public void onLoadMore() {
    			}
    		});
    		
    		//初始化的数据
    		initUserData();
    	}
    	
    	 //测试下拉刷新的数据
    	@SuppressLint("UseSparseArrays")
    	private void initUserData1() {
    		mGroup = new ArrayList<String>();
    		mChildren = new HashMap<Integer, List<User>>();// 给每一组实例化child
    		
    		// 初始化组名和child
    		for (int i = 0; i < groups.length; ++i) {
    			mGroup.add(groups[i]);// 组名
    			List<User> childUsers = new ArrayList<User>();// 每一组的child
    			mChildren.put(i, childUsers);
    		}
    		
    		nameArray = getResources().getStringArray(R.array.jazzy_effects_ch);
    		for (int i = 0; i < 20; i++) {
    			for (int j = 0; j < mGroup.size(); ++j){
    			int icon = heads[i];
    			String name = nameArray[i];
    			User user = new User(name, icon,0);
    			mChildren.get(j).add(user);
    			}
    		}
    		
    		//
    		mAdapter = new MyListAdapter(this, mGroup, mChildren);
    		mxListView.setAdapter(mAdapter);
    	}
    	
    	//初始化的数据
    	@SuppressLint("UseSparseArrays")
    	private void initUserData() {
    		mGroup = new ArrayList<String>();
    		mChildren = new HashMap<Integer, List<User>>();// 给每一组实例化child
    		
    		// 初始化组名和child
    		for (int i = 0; i < groups.length; ++i) {
    			mGroup.add(groups[i]);// 组名
    			List<User> childUsers = new ArrayList<User>();// 每一组的child
    			mChildren.put(i, childUsers);
    		}
    		
    		nameArray = getResources().getStringArray(R.array.jazzy_effects_ch);
    		for (int i = 0; i < 5; i++) {
    			for (int j = 0; j < mGroup.size(); ++j){
    			int icon = heads[i];
    			String name = nameArray[i];
    			User user = new User(name, icon,0);
    			mChildren.get(j).add(user);
    			}
    		}
    		
    		//加载数据,新建适配器
    		mAdapter = new MyListAdapter(this, mGroup, mChildren);
    		//列表绑定适配器
    		mxListView.setAdapter(mAdapter);
    	}
    	
    	public static  int[] heads = { R.drawable.h0, R.drawable.h1,
    		R.drawable.h2, R.drawable.h3, R.drawable.h4, R.drawable.h5,
    		R.drawable.h6, R.drawable.h7, R.drawable.h8, R.drawable.h9,
    		R.drawable.h10, R.drawable.h11, R.drawable.h12, R.drawable.h13,
    		R.drawable.h14, R.drawable.h15, R.drawable.h16, R.drawable.h17,
    		R.drawable.h18, R.drawable.h19, R.drawable.h20, R.drawable.h21};
    	
    	public static String[] nameArray = new String[21];
    	
    	private static final String[] groups = { "未分组好友", "我的好友", "我的同学", "我的家人",
    	"我的同事" };
    }
    
    五、主界面的xnl

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <com.org.xlistview.XExpandableListView
            android:id="@+id/friend_xlistview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@android:color/transparent"
            android:cacheColorHint="@android:color/transparent"
            android:divider="@null"
            android:transcriptMode="normal" >
        </com.org.xlistview.XExpandableListView>
    
    </RelativeLayout>

    一些动画效果的源码,我就不贴上来,也不说细节了。我只说了怎样调用,写适配。

    动画效果的源码可下载。本文源码下载:点击


    展开全文
  • 怎样判断是否应当使用下拉菜单  下拉菜单,就是将一系列的选项隐藏,通过单击某一个控件将会弹出一个包含这些选项的列表,在其中选择想要的选项。这样不但可以节省屏幕空间,也可以让用户在进行选择时更加方便...
  • 自己一个自定义列表搜索(下拉列表和自带搜索结合),A列属性上只需要这是data-serachable=true 就可指定列A搜索。当下拉列表选择B值对应的值时,修改A列对应data-serachable=false且B列对应data-serachable=true
  • 最近项目,需要动态加载数据显示到下拉列表中。 刚开始用select标签,由于数据较多,一次性全部加载,下拉列表会拖得很长,不忍直视(默认会显示20个)。 我想控制select中的option显示的个数,例如:只显示5个...
  • 添加了两次研发人员,每次都要研究一番才能搞定,索性就记录下来吧 第一次添加了之后,研发人员解决bug时提示:无权限访问产品,...在该列表的用户字段的下拉中选择要加入的开发人员,保存后开发人员才有权操作bug ...
  • 怎样对业务进行建模1

    2011-04-28 22:13:00
    遇到需求要看具体应用情况:实际业务中很少见一个下拉树中,又放业务员、又放客户、还要放产品 这样有什么意义? 多数情况是通过取数函数、下拉框等来将数据之间的对应关系提取到表单界面上 所以用2个列表型基础...
  • Bug情景说明需求是界面中展示一个条目列表,条目最上面是一张图片,下拉后,图片由模糊变清晰,最后我选用了用ScrollView去解决,以下是最终界面 这是用一个ScrollView来的: 问题1:ScrollView与其子控件之间...
  • 我想要一个二联机的下拉列表框 就像你给出的列子一样 第一个列表框是省份,选择后,在 第二个下拉框中选择对应的城市。 这个 remote_function 怎样才能返回值(即@cities),还有update更新的那个部分的数据? 能...
  • 但是状态栏还是会有通知的图标,而且下拉列表也会有这个通知。有没有大神 知道如何在上划通知是,彻底把通知cancel了。我的代码如下: NotificationManager notificationManager=(NotificationManager)...
  • SyteLine实现字段过滤

    2015-10-15 14:11:00
    如果说某个下拉列表,想过滤某些选项,该怎样呢,在Infor Syteline实现起来是一件很容易的事情。如在Fixed Assets窗口中的Class Code的下拉列表中,如果不想"_OB"的选项显示出来。 首先打开Fixed Assets窗口,...
  • Excel2013 表格常用技巧

    千次阅读 2016-12-15 20:46:17
    Excel怎样给单元格添加下拉列表 按住CTRL,依次选中多个单元格; 在“数据”中点击“数据验证”; 在弹出框中,如下操作: 在“允许”中,选择“序列”; “忽略控制”和“提供下拉箭头”前的复选框打钩; 鼠标...
  • 传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT ...今天我就怎样制定ComboBox自己定义下拉框一番探讨。 首先我们先来目睹下效果: 看起来跟普通的ComboBox好像也没什么特殊的...
  • 最近被一个问题困扰住了,纠结死我了,目前没找到什么好的办法,其实问题很简单:我在界面显示了一个listview,其中每一个item显示了一个spinner下拉列表和一个EditText文本输入框。通过重写继承的BaseAdapter实现的...
  • 如下图,当输入时,会有一个下拉列表的智能提示,非常好用,可是,如果是自定义的config节点,就不会有提示,如果你想,那就继续往下看。首先,怎样为config添加自定义的节点。先创建一个自定义类,把下面代码...
  • 也是很羡慕别人哪些精致的界面,印象很深的是QQ登陆界面的下来列表,下面,我们简单的来介绍下怎样做到和QQ登陆界面一样的下拉列表。 先看一下效果: 没有qss的美化,简单的实现了下功能,如果需要在显示名称的...
  • ”列表框中选择声音事件,然后从“声音”下拉列表中选择需要的声音文件 作为声音提示。  (3)用户如果对系统提供的声音文件不满意,可以单击“浏览”按钮,弹 出浏览声音对话框。在该对话框中选定声音文件,并...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    8.6 工具栏、状态栏及下拉列表 187 0288 制作带历史信息的菜单 187 0289 制作可以拉伸的菜单界面 188 0290 制作类似于XP颜色的下拉页 188 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件...
  • 输入之后单击菜单栏上的的文件,在下拉列表中选择另存为选项。 在弹出的另存为选项对话框中,浏览你的U盘根目录,给文件取名为autorun.inf ,然后单击保存按钮。 这里要记住的是,文件名一定要是autorun.inf,不要...
  • android开发入门教程--上(完整版)

    千次下载 热门讨论 2011-01-24 11:26:39
    7.3.7 下拉列表(Spinner)介绍与应用 7.3.8 自动完成文本(AutoCompleteTextView) 7.3.9 日期选择器(DatePicker)介绍与应用 7.3.10 时间选择器(TimePicker)介绍与应用 7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 ...
  • asp.net知识库

    2015-06-18 08:45:45
    页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp...
  • 4) 显示日历下拉列表.................................................................................................13 5) 3D或平面外观效果.................................................................
  • 7.3.7 下拉列表(Spinner)介绍与应用 7.3.8 自动完成文本(AutoCompleteTextView) 7.3.9 日期选择器(DatePicker)介绍与应用 7.3.10 时间选择器(TimePicker)介绍与应用 7.3.11 滚动视图(ScrollView)介绍与应用 7.3.12 ...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

怎样做下拉列表