日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

[转载]Android: 如何实现ScrollView中含有ListView?

發布時間:2025/7/14 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载]Android: 如何实现ScrollView中含有ListView? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址:Android:?如何實現ScrollView中含有ListView?作者:mailofzxf ListView本身就含有ScrollView,因此把ListView放到ScrollView中會引起混亂(誰來響應滑動事件?)但有時又確有此需求,以實現ListView的內容連同其他內容的滾動。

要想把ListView嵌入ScrollView,有二個方法:

方法1:整體上使用一個ListView, 把不需滾動的部分放入ListView的Header或Footer中。
注意: 一定要先添加HearderView和FooterView,然后再設置ListView的Adapter.
缺陷: Header或Footer中的內容不能滾動;并且只能允許同時存在一個ListView。
代碼如下:

?????LayoutInflater mLI =
???????????(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

?????listView?=?(ListView)?findViewById(R.id.listView);
?????datas?=?new?ArrayList<Object>();
?????fillDatas();
?????datasAdapter?=?new?DemoListAdapter(context,?datas);
?????MyListHeaderView?headerView?=?mLI.inflate(R.layout.my_header_layout, null);
?????FillDataToHeaderView(headerView);
?????MyListFooterView footerView?=?mLI.inflate(R.layout.my_footer_layout, null);
?????FillDataToFooterView(footerView);?

?????listView.addHeaderView(headerView);?
?????listView.addFooterView(footerView);
?????listView.setAdapter(datasAdapter);
?
方法2:用LinearLayout模擬ListView, 從而實現任意內容的滾動。
下面實現的是一個通用的LinearLayoutForListView,可以為它設置不同的Adapter從而顯示不同的數據。
LinearLayoutForListView的代碼如下:

public class LinearLayoutForListView extends android.widget.LinearLayout {
????static final String LOG_TAG = "LinearLayoutForListView";
????private android.widget.BaseAdapter adapter;
????private OnClickListener onClickListener = null;

????public void fillLinearLayout() {
????????int count = adapter.getCount();
????????for (int i = 0; i < count; i++) {
????????????View v = adapter.getView(i, null, null);
????????????v.setOnClickListener(this.onClickListener);
????????????addView(v, i);
????????}
????????Log.v("countTAG", "" + count);
????}

????public LinearLayoutForListView(Context context) {
????????super(context);
????}

????public LinearLayoutForListView(Context context, AttributeSet attrs) {
????????super(context, attrs);
????}

????public android.widget.BaseAdapter getAdpater() {
????????return adapter;
????}

????public void setAdapter(android.widget.BaseAdapter adpater) {
????????this.adapter = adpater;
????????fillLinearLayout();
????}

????public OnClickListener getOnclickListner() {
????????return onClickListener;
????}

????public void setOnclickLinstener(OnClickListener onClickListener) {
????????this.onClickListener = onClickListener;
????}
}

注意,上面LinearLayoutForListView的成員adapter是BaseAdapter,因此可以自定義其它的Adapter來加入數據。下面是一個Adapter的參考實現,用于顯示一個軟件開發者的聯系信息:

public class DeveloperInfoAdapter extends BaseAdapter??{
????static final String LOG_TAG="DeveloperInfo";
????public final int VIEW_INDEX = 3000;
????private Context??mContext;
????private String[] mKeys;
????private String[] mTitles;
????private String[] mVals;
????LayoutInflater mLI = null;

????public DeveloperInfoAdapter(Context context, String[] keys, String[] titles, String[] vals) {
????????mContext = context;
????????mKeys = keys;
????????mTitles = titles;
????????mVals = vals;
????????mLI = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
????????// to Make sure mKeys(...) are NOT null:
????????if(mKeys==null || mTitles==null || mVals==null) {
????????????mKeys = mTitles = mVals = new String[]{};
????????}
????}
????
????@Override
????public int getCount() {
????????return mKeys.length;
????}
????
????@Override
????public String getItem(int index) {
????????if(index>=0 && index<mVals.length)
????????????return mVals[index];
????????else
????????????return null;
????}
????
????@Override
????public long getItemId(int position) {
????????return position;
????}
????
????@Override
????public View getView(int position, View convertView, ViewGroup parent) {
????????????if(position <0 || position > mKeys.length)
????????????????return null;
????????????final String key = mKeys[position];
????????????final String title = mTitles[position];
????????????final String val = mVals[position];
????????????
????????????View v = convertView;
????????????if (v == null) {
????????????????v = mLI.inflate(R.layout.dev_web_email_layout, null);
????????????}
????????????v.setId(position+VIEW_INDEX);
????????????v.setClickable(true);
????????????
????????????if (true) {
????????????????TextView v_title = (TextView) v.findViewById(R.id.dev_title);
????????????????TextView v_val = (TextView) v.findViewById(R.id.dev_val);
????????????????v_title.setText(title);
????????????????v_val.setText(val);
????????????}
????????????return v;
????}

????
????private void callBrowser(String url){
????????if(TextUtils.isEmpty(url))
????????????return;
????????final String prefix = "http://";
????????try {
????????????if(!url.startsWith(prefix))
????????????????url = prefix + url;
????????????Uri uri = Uri.parse(url);
????????????Intent intent = new Intent(Intent.ACTION_VIEW, uri);
????????????mContext.startActivity(intent);
????????} catch (Exception e) {
????????????String err_msg = e.getMessage();
????????????Log.d(LOG_TAG, "Uri err: " + err_msg);
????????}
????}

????private void callEmail(String emailbox){
????????if(TextUtils.isEmpty(emailbox))
????????????return;
????????final String prefix = "mailto:";
????????try {
????????????if(!emailbox.startsWith(prefix))
????????????????emailbox = prefix + emailbox;
????????????Uri uri = Uri.parse(emailbox);
????????????Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
????????????mContext.startActivity(intent);
????????} catch (Exception e) {
????????????String err_msg = e.getMessage();
????????????Log.d(LOG_TAG, "Uri err: " + err_msg);
????????}
????}
????
????public android.view.View.OnClickListener myOnClickListener
???????????????????= new android.view.View.OnClickListener() {
????????@Override
????????public void onClick(View v) {
????????????try {
????????????????int id = v.getId();
????????????????int position = id-VIEW_INDEX;
????????????????if(position <0 || position > mKeys.length)
????????????????????return;
????????????????final String key = mKeys[position];
????????????????final String title = mTitles[position];
????????????????final String val = mVals[position];
????????????????
????????????????if("website".equals(key)) {
????????????????????callBrowser(val);
????????????????} else if("email".equals(key)) {
????????????????????callEmail(val);
????????????????}
????????????} catch (Exception e) {
????????????????// Do nothing!
????????????}
????????}????????
????};
????
}

相關的layout文件部分如下:
????????????<TextView android:id="@+id/detail_developer"
????????????????????android:layout_width="fill_parent"
????????????????????android:layout_height="wrap_content"
????????????????????android:text="@string/lbl_title_developer"
????????????????????android:textStyle="bold"
????????????????????android:background="#008F00"
????????????????????>
????????????</TextView>
????????????<com.xxx.yyy.LinearLayoutForListView android:id="@+id/detail_lst_web_email"
????????????????android:orientation="vertical"
????????????????android:layout_width="fill_parent"
????????????????android:layout_height="wrap_content"
????????????????android:visibility="visible"
????????????????android:clickable="true"
????????????????>
????????????</com.xxx.yyy.LinearLayoutForListView>

以下代碼向這個假的ListView填入數據:
????????com.xxx.yyy.LinearLayoutForListView lst_developer
???????????????= (com.xxx.yyy.LinearLayoutForListView) findViewById(R.id.detail_lst_web_email);
????????String keys[]={ "website", "email"};
????????String titles[]={getResources().getString(R.string.lbl_title_developer_website),
?????????????????????????getResources().getString(R.string.lbl_title_developer_email)};
????????String vals[]={"http://abc.com", "abc@def.com"};
????????DeveloperInfoAdapter developerAdapter = new DeveloperInfoAdapter(this, keys, titles, vals);
????????lst_developer.setOnclickLinstener(developerAdapter.myOnClickListener);
????????lst_developer.setAdapter(developerAdapter);

<完>

結伴旅游,一個免費的交友網站:www.jieberu.com

推推族,免費得門票,游景區:www.tuituizu.com

轉載于:https://www.cnblogs.com/rabbit-bunny/p/4167085.html

總結

以上是生活随笔為你收集整理的[转载]Android: 如何实现ScrollView中含有ListView?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。