GVKun编程网logo

Android动态创建UI v.ListView(android 动态创建控件)

11

针对Android动态创建UIv.ListView和android动态创建控件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展027Android可扩展的listview:Expandabl

针对Android动态创建UI v.ListViewandroid 动态创建控件这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展027 Android 可扩展的 listview:ExpandableListView 的使用案例、Android ArrayList ListView / Textview-您必须为textview提供资源ID、android ListView 多次调用 getView方法、Android ListView 扩展 DragSortListView等相关知识,希望可以帮助到你。

本文目录一览:

Android动态创建UI v.ListView(android 动态创建控件)

Android动态创建UI v.ListView(android 动态创建控件)

我有一个正在使用Xamarin开发的android应用.该应用程序与服务器联系,并通过Web服务(SOAP)接收对象列表.目前,在我的axml文件中,scrollview标记内只有线性布局(ll),而没有其他内容.在代码中,我遍历集合并更新所需的元素,并将其附加到布局.完成每条记录后,我将(即AddView)附加到主版式(ll).一切正常.

我有两个问题,对此我表示感谢.

1)列表中的每个对象都包含一个在线图像的URL.目前,对于每个对象,我的过程都会单独下载图片.即使对象的其他属性不同,ListView也会给我带来任何重用(缓存等)已下载图片的优势吗?如果切换到ListView,在网络利用率方面会有所提高吗?

2)手动绘制元素(如我正在做的)是否是可以接受的最佳实践?

谢谢大家

解决方法:

绝对使用ListView.卢卡斯·罗查(Lucas Rocha)撰写了一篇很棒的文章here,它准确地概述了ListViews为何有益以及如何使它们表现得更好.举几个例子,ListViews最小化了视图膨胀的数量,它们仅创建当前在屏幕上可见或即将在屏幕上可见的列表项.

与您的方法相比,这是一个巨大的改进,因为当前的方法将在向用户展示活动之前加载列表中的每个元素.因此,像您当前正在手工绘制的元素绝对不是最佳实践.

此外,为了在Xamarin应用程序中显示URL中的图像,我强烈建议您使用Xamarin组件UrlImageViewHelper.尽管在您的应用程序中实现起来非常简单,但由于它可以处理图像缓存和异步图像加载,因此可以大大提高性能.

027 Android 可扩展的 listview:ExpandableListView 的使用案例

027 Android 可扩展的 listview:ExpandableListView 的使用案例

1.ExpandableListView 简介

ExpandableListView 是一种用于垂直滚动展示两级列表的视图,和 ListView 的不同之处就是它可以展示两级列表,分组可以单独展开显示子选项。这些选项的数据是通过 ExpandableListAdapter 关联的。

2.xml 页面布局

(1) 主界面布局 (CommonNumberQueryActivity 对应布局)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".CommonNumberQueryActivity">

    <TextView
        style="@style/TitleStyle"
        android:text="常用号码查询" />

    <!--可以扩展的listview:ExpandableListView-->
    <ExpandableListView
        android:id="@+id/elv_common_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ExpandableListView>
</LinearLayout>

(2)elv_child_item_group.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:padding="5dp"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv_group_name"
        android:text="分组名称"
        android:layout_marginLeft="40dp"
        android:textSize="16sp"
        android:textColor="@color/red"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>


</LinearLayout>

(3)elv_child_item_child.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:padding="5dp"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv_name"
        android:text="电话名称"
        android:textSize="16sp"
        android:textColor="#000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv_number"
        android:text="电话号码"
        android:textSize="16sp"
        android:textColor="#000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

3.java 后台代码

package com.example.administrator.test62360safeguard;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

import com.example.administrator.test62360safeguard.engine.CommonNumberDao;

import java.util.List;

public class CommonNumberQueryActivity extends AppCompatActivity {

    ExpandableListView elv_common_number;
    List<CommonNumberDao.Group> groupList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_common_number_query);
        initUI();
        initData();
    }

    /**
     * 给可扩展的listview:ExpandableListView准备数据,并填充
     * 首先将对应的数据库文件放入assets目录下
     */
    private void initData() {
        CommonNumberDao commonNumberDao=new CommonNumberDao();
        //获取数据库中的数据
        groupList = commonNumberDao.getGroup();
        System.out.println("groupList:"+groupList);
        //给ExpandableListView设置数据适配器
        elv_common_number.setAdapter(new MyAdapter());
    }

    private void initUI() {
        elv_common_number = findViewById(R.id.elv_common_number);
    }

    private class MyAdapter extends BaseExpandableListAdapter {
        @Override
        public int getGroupCount() {
            return groupList.size();
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return groupList.get(groupPosition).childList.size();
        }

        @Override
        public CommonNumberDao.Group getGroup(int groupPosition) {
            return groupList.get(groupPosition);
        }

        @Override
        public CommonNumberDao.Child getChild(int groupPosition, int childPosition) {
            return groupList.get(groupPosition).childList.get(childPosition);
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        /**
         * 固定写法不需要修改
         */
        @Override
        public boolean hasStableIds() {
            return false;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            View view = View.inflate(getApplicationContext(), R.layout.elv_child_item_group, null);
            TextView tv_group_name = view.findViewById(R.id.tv_group_name);
            tv_group_name.setText(getGroup(groupPosition).name);
            return view;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            View view = View.inflate(getApplicationContext(), R.layout.elv_child_item_child, null);
            TextView tv_name = view.findViewById(R.id.tv_name);
            TextView tv_number = view.findViewById(R.id.tv_number);
            tv_name.setText(getChild(groupPosition, childPosition).name);
            tv_number.setText(getChild(groupPosition, childPosition).number);
            return view;
        }

        /**
         * @return 孩子节点是否响应事件
         */
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return false;
        }
    }
}

4. 效果图

 

Android ArrayList ListView / Textview-您必须为textview提供资源ID

Android ArrayList ListView / Textview-您必须为textview提供资源ID

我曾经在某一时刻进行过这项工作,所以我认为我所引用的东西有误。_regionListView似乎返回确定。我认为ArrayList中的数组是问题,因为它包含额外的空索引,但我认为我没有正确连接到ListView和TextView。

任何帮助,将不胜感激。

Main.java

String _region = inRegion;    ParserRegion _parserRegion = new ParserRegion();    InputStream _inputStream = getResources().openRawResource(R.raw.regions);    // Parse the Input Stream    _parserRegion.Parse(_inputStream, _region);    // Get Regions    List<PropertiesRegion> _regionList = _parserRegion.GetList();    // Create the ArrayAdapter    ArrayAdapterRegion _arrayAdapter = new ArrayAdapterRegion(getApplicationContext(), R.layout.search_list, _regionList);    // Get reference to ListView holder    ListView _regionListView = (ListView) this.findViewById(R.id.regionListView);    // Set the ListView adapter    _regionListView.setAdapter(_arrayAdapter);

Search.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:adjustViewBounds="true"    android:background="@drawable/search_background"    android:gravity="center"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical"     android:scaleType="centerCrop" >    <TextView        android:id="@+id/selectRegionTextView"        android:cacheColorHint="#00000000"        android:layout_width="wrap_content"        android:layout_height="30dp"         android:layout_marginLeft="10dip"        android:layout_marginRight="10dip"        android:layout_marginTop="150dip"        android:gravity="top"        android:textColor="#000000"        android:textSize="20dip"        android:textandroid:typeface="sans" />    <ListView         android:id="@+android:id/regionListView"        android:cacheColorHint="#00000000"         android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:layout_marginBottom="5dip"        android:layout_marginLeft="10dip"        android:layout_marginRight="10dip"        android:padding="10dp" />    <Button        android:id="@+id/mainMenuButton"        android:background="@drawable/button_black"        android:layout_width="match_parent"        android:layout_height="50dp"        android:layout_marginBottom="70dip"        android:layout_marginLeft="20dip"        android:layout_marginRight="20dip"            android:typeface="sans"            android:textSize="18dip"            android:textandroid:textColor="@android:color/white"/></LinearLayout>

Search_list.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="fill_parent"    android:layout_height="wrap_content">    <TextView        android:id="@+id/regionTextView"        android:cacheColorHint="#00000000"        android:gravity="center"        android:layout_gravity="left"        android:layout_width="wrap_content"        android:layout_height="60dp"         android:paddingLeft="10dip"        android:textColor="#000000"        android:typeface="sans"        android:textSize="20dip"        android:text/></LinearLayout>

答案1

小编典典

从search_list.xml中删除LinearLayout并仅使用textview并将其放入textview本身

xmlns:android="http://schemas.android.com/apk/res/android"

那里不需要LinearLayou,也可以设置 android:layout_height =“ wrap_content” 。然后它将起作用。:)

android ListView 多次调用 getView方法

android ListView 多次调用 getView方法

<ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/alarm_list">
</ListView>

 

ListView 的高度 必须要设置成一个明确的值 或者match_parent  不然就会调用多次getView方法

Android ListView 扩展 DragSortListView

Android ListView 扩展 DragSortListView

DragSortListView(DSLV)是 Android ListView 的一个扩展,支持拖拽排序和左右滑动删除功能。重写了 TouchInterceptor(TI)类来提供更加优美的拖拽动画效果。

DSLV 主要特性:

  • 完美的拖拽支持;

  • 在拖动时提供更平滑的滚动列表滚动;

  • 支持每个 ListItem 高度的多样性

  • 公开 startDrag () 和 stopDrag () 方法;

  • 有公开的接口可以自定义拖动的 View。

DragSortListView 适用于带有任何优先级的列表:收藏夹、播放列表及清单等,算得上是目前 Android 开源实现拖动排序操作最完美的方案。

(简介来自:http://www.csdn.net/article/2013-05-06/2815145-Android-open-source-projects-two)

更多 http://www.oschina.net/code/snippet_219356_18991

今天关于Android动态创建UI v.ListViewandroid 动态创建控件的讲解已经结束,谢谢您的阅读,如果想了解更多关于027 Android 可扩展的 listview:ExpandableListView 的使用案例、Android ArrayList ListView / Textview-您必须为textview提供资源ID、android ListView 多次调用 getView方法、Android ListView 扩展 DragSortListView的相关知识,请在本站搜索。

本文标签: