android的ListView Adapter如何动态更改数据

 更新时间:2016年9月20日 19:58  点击:1663
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示,使用adpater与listview捆绑后,有时希望在程序使用过程中能动态的更改listview中显示的数据

使用adpater与listview捆绑后,有时希望在程序使用过程中能动态的更改listview中显示的数据,如何处理?

一、关键代码段

 代码如下 复制代码
private ListView mListView;
    private Button mBtnChange;
    private android.view.View.OnClickListener mCancelClick;
    private ArrayList<String> mStarNameList = new ArrayList<String>();
    private String[] mAnimalNameList = new String[] {"Dog","Cat","Snake","Duck","Bird"};
    private String[] mStarNameList1 = new String[] {"Kobe","James","Durant","Wade","Love"};
    private ArrayAdapter<String> mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setCtrlsEventHandler();
        this.mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,mStarNameList);
        this.mListView = (ListView)findViewById(R.id.listView1);
        this.mBtnChange = (Button)findViewById(R.id.button1);
        this.mBtnChange.setOnClickListener(this.mCancelClick);
        this.mStarNameList.add("Kobe");
        this.mStarNameList.add("James");
        this.mStarNameList.add("Durant");
        this.mStarNameList.add("Wade");
        this.mListView.setAdapter(this.mAdapter);
        this.mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    }
    private boolean mIsMutex = false;
    private void setCtrlsEventHandler()
    {
        this.mCancelClick = new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                if(mIsMutex)
                {
                    mBtnChange.setText("True");
                    mStarNameList.clear();
                    for(int i=0;i<mAnimalNameList.length;i++)
                        mStarNameList.add(mAnimalNameList[i]);
                    mAdapter.notifyDataSetChanged();
                    mIsMutex = false;
                }
                else
                {
                    mBtnChange.setText("False");
                    mStarNameList.clear();
                    for(int i=0;i<mStarNameList1.length;i++)
                        mStarNameList.add(mStarNameList1[i]);
                    mAdapter.notifyDataSetChanged();
                    mIsMutex = true;
                }
            }
        };
    }

功能实现主要原理:

用ArrayList mStarNameList 给Adapter填充数据,再将listview与adapter捆绑。

当要修改数据时候,只需要对mStarNameList 进行修改,再调用Adapter.notifyDataSetChanged()就可以实现效果。

二、执行效果

image

image

Android Studio是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。

前言

最近Android studio(下文简称AS)官方发布了正式版,目前火得不行。个人认为主要是因为android是google自家的产品,AS也是他自己搞的IDE,以后的趋势android开发肯定会用AS,至于eclipse的adt插件是否继续更新就不可而知了。最近我也在android官网找了一下集成好的 adt-bundle,但没有找到,可能是路径变了(搜索也没有找到)或者是真的为了支持AS就下架了。Github上现在也是一大堆的AS项目,所以这是个趋势啊。

之所以写本文是因为网上找的eclipse迁移到AS的相关文章都比较老,不一定适用(至少我遇到了很多问题)

准备工作

1、 去官网下载AS最新版,目前是1.0版本。

2、 升级AS,目前可以升级到1.0.2。升级过程中可能会遇到些问题,具体如下:

① 选择升级渠道。AS的升级是可以自己选择升级的渠道,不同的渠道的发布版本不一样,如图(我选择的stable channel,每个渠道对应什么样的版本这里不解释,网上有说明。)

[最新图文版]如何将项目从eclipse迁移到android studio?

 

② 网络问题。google在大陆的情况大家都是知道的,所以更新不了也不奇怪,你需要使用vpn或者代理。读者自行网上找解决网络的方法,这里不方便解释,你懂的。

③ 升级ADT到ADT-23.0.4(本文默认你已经有安装了ADT的eclipse)。如果你的eclipse版本太低的话那么还得先下载一个高版本的eclipse(我使用的是version=4.3.2)再安装ADT-23.0.4。

准备工作中都是用的最新的版本,升级虽然不是必须的,但是为了避免遇到莫名其妙的问题就照做吧。

迁移步骤

1、 eclipse导出gradle项目。

File->Export->Generate Gradle build files然后一直下一步,选择你要导出的项目(不用管依赖项目,会自动导出的),如图:

[最新图文版]如何将项目从eclipse迁移到android studio?

 

2、 AS导入。

启动AS进入“welcome to android studio”这个界面,选择“Import Non-Andorid Studio Project”,一定是这个选项,不然导入有问题。(如果你的AS不是在这个界面,那么通过File->close project就可以进入这个界面了)然后找到步骤1中的那个项目就可以成功导入了。

[最新图文版]如何将项目从eclipse迁移到android studio?

 

3、 耐心等待。

导入的时候可能比较慢,因为要下载gradle,然后就等下载完成。如果是因为自身网络的问题那么就用vpn、代理之类的(File->Settings->Http proxy)。

4、 更改Gradle版本(非必须)。一般导出的项目都会有版本不一致的问题,那么在AS提示修复Gradle版本同意修复就可以了。

根据以上的步骤基本上算是成功迁移了项目。你的项目如果有多个依赖包,那么可能编译不过,大概提示是有多个相同的包,比如support-v4包。如果遇到这样的问题,可以进行如下操作。

1、 那么可以把support-v4.jar删掉。

2、 打开project structrue(ctrl+alt+shift+s),找刚刚那个module,选择Dependencies,点击右边的”+”号重新添加v4包即可。

[最新图文版]如何将项目从eclipse迁移到android studio?

 

基本上通过这些步骤就可以把eclipse项目迁移到AS上了,要是遇到其他的问题基本上通过AS提示就可以处理,目前还没有遇到。更多的AS的使用就只有慢慢熟悉。

官方文档

以下是官方文档,我也是根据官方文档来做的,把之前做的和遇到的问题做了一个总结。

To migrate existing Android projects, simply import them using Android Studio:

In Android Studio, close any projects currently open. You should see theWelcome to Android Studio window.

Click Import Non-Android Studio project.

Locate the project you exported from Eclipse, expand it, select the build.gradle file and click OK.

In the following dialog, leave Use gradle wrapper selected and click OK. (You do not need to specify the Gradle home.)

Android Studio properly updates the project structure and creates the appropriate Gradle build file.

官方android studio文档在http://developer.android.com/tools/studio/index.html

总结

本人也是AS新手,之前一直用eclipse,遇到问题基本上靠google。文中有不妥之处请指正,谢谢。在此留下小弟的android交流群:311536202。有问题希望在群里面讨论,共同学习。

本教程我们来学习一下在Android开发中如何在主页面点击进入子页面,然后子页面再点一下进入主页面,这样可以互相切换,增强用户体验。

软件平台:Windows 7 + Eclipse + SDK

设计思路:

两个页面:mian和ok,每个页面上有一个按键,点击则可以互相切换

源代码:

main.xml源代码:

 

 代码如下 复制代码
xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android" 
    Android:orientation="vertical" 
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent" 
    > 
<TextView   
    Android:layout_width="fill_parent"  
    Android:layout_height="wrap_content"  
    Android:text="@string/hello" 
    /> 
<Button Android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一页面 ">Button> 
LinearLayout> 

 

ok.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"> 
    <Button Android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一页面 " android:id="@+id/button1">Button> 
LinearLayout> 

makechoice源代码:

package com.makechoice; 
 
import Android.app.Activity; 
import Android.os.Bundle; 
import Android.view.View; 
import Android.widget.Button; 
 
public class makechoice extends Activity 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState)  
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        Button btn = (Button)findViewById(R.id.button1); 
        btn.setOnClickListener(new Button.OnClickListener() 
        { 
            @Override 
            public void onClick(View v) 
            { 
                jump2ok(); 
            } 
        }); 
    } 
     
    //跳到ok页面  
    public void jump2ok() 
    { 
        setContentView(R.layout.ok); 
        //当有按键按下跳到main页面  
        Button btn = (Button)findViewById(R.id.button1); 
        btn.setOnClickListener(new Button.OnClickListener() 
        { 
            @Override 
            public void onClick(View v) 
            { 
                jump2main(); 
            } 
        }); 
    } 
     
  //跳到main页面  
    public void jump2main() 
    { 
        setContentView(R.layout.main); 
        //当有按键按下跳到ok页面  
        Button btn = (Button)findViewById(R.id.button1); 
        btn.setOnClickListener(new Button.OnClickListener() 
        { 
            @Override 
            public void onClick(View v) 
            { 
                jump2ok(); 
            } 
        }); 
    } 
}

 

运行效果图:

Android开发制作面切换教程

Android开发制作面切换教程

注意:

类R中存放的ID号为当前页面的ID号,所以findViewById函数捕获的控件也为当前页面的控件

Android应用程序调试和运行,是Android开发的一个重点,因为开发和调试不在同一设备,一般是安装虚拟机。本教程我们来学习如何在真实的设备上(比如手机)调试运行Android应用。

在本教程中,我们将使用Windows 64位平台上的下列工具:

JDK1.7

Eclipse 4.2 Juno

Sony Xperia Tipo

为了在真实设备上调试和运行应用,大体上需要遵循以下步骤:

如果你使用的是Android开发手机(ADP),例如Nexus One或者Nexus S,下载Google的USB驱动。

如果你使用的是其他Android设备,如索尼、LG、HTC、那么下载对应OEM的USB驱动。

在手机上开启USB调试。

将设备连到电脑。

使用adb.exe devices命令确认设备已经成功连接。

设置Eclipse,以便手动选择运行应用的目标设备。

1. 下载USB驱动

如果您使用的是Android开发手机(ADP)的设备,你只需要打开Android SDK管理器然后安装谷歌的USB驱动程序。

 

google-usb-driver

 

如果你使用的是其他的Android设备,可以按照官方的Android USB驱动程序指南,下载自己的设备驱动程序。

正如前面提到的,我将使用索尼的Xperia Tipo。如果您使用的是索尼的设备,可以在索尼手机页面找到合适的驱动程序。在我的例子中,当手机插到电脑上时,就会提示需要安装索尼PC伴侣。

 

phone-companion1

 

这将把所有手机连接到电脑需要的驱动程序都安装上,包括用于Android调试的USB驱动程序。我认为这应该是最现代化的智能手机的案例。如果你遇到任何问题,可以随时访问厂商的网页下载驱动程序。安装完驱动程序后,可能需要重新启动计算机。

2. 在设备上启用USB调试

为了在真实设备上运行Android应用,需要在手机上开启USB调试功能。

进入 “设置”

 

settings

 

“开发者选项”

 

dev-options

 

“USB调试”。

 

usb-debugging

 

3. 把设备连接到电脑上

在本步骤中,必须将手机连接到PC,并确认它能被系统正确识别。如果这一步工作正常,这意味着USB驱动程序工作正常。

如果你的手机已经连接,打开命令提示符并进入到Android SDK的安装文件夹中,进入 platform-tools目录。在该文件夹中有很多Android的命令行工具。

粘贴以下命令:

1adb.exe devices

 

devices

 

正如上图看到的,设备已成功连接,并被分配ID BX903DMU63。太好了!

4. Eclipse 开发设置

如果你已经开发了一段时间的Android应用程序,可能你一直在使用Android模拟器。 Eclipse中默认的设置是在Android虚拟设备上部署应用程序。因此,我们要对其进行配置,允许手动选择,我们希望应用程序运行在手动选择的设备上。其中的一个选项必须是我们的真实设备。

在Eclipse中选择“运行->运行配置”。然后从左边列表中选择想要运行的Android项目。单击“目标”选项卡。选择选项“始终提示选择设备”。另外,您可以选择“启动所有兼容的设备/AVD”。此选项将在所有可用的Android设备上,包括模拟器和真实设备,在同一时间运行您的项目。

在本教程中我将使用一个工作区中已有的Android项目,它是一个简单的Android进度条的例子。

 

prompt-to-pick-device

 

5. 运行项目

现在,当运行Android项目时会提示你选择一个设备。选中“选择一个运行中的Android设备”,然后选择自己的设备。

 

select-real-device

 

现在让我们看看我们的应用在真实设备上是什么样子的。这是主画面:

 

main-screen

 

当我们轻点按钮:

 

screen

 

就是这样!

这就是关于如何在Android真实设备上调试应用的Android教程。

password控件是一个密码控件了我们在登录时密码都是使用这个控件了,下面小编为各位介绍解决Android上用javascript对webview的password控件赋值问题,希望对各位有帮助。

在cnblogs的android客户端开中使用webview模拟登录,这样就需要将用户输入的用户名和密码传到webview上然后提交,这个过程在mx3的flyme3和flyme4上测试一切正常,然而在我的htcG12上(用的miui4),和三星note2上都报错。

报错的代码为:

 代码如下 复制代码


public void LoginByPassword(String username, String password){
        mCurrentRT = EnumRequestType.LoginFinish;
        final String strJS = String.format("javascript:document.getElementById('tbUserName').value='%s';document.getElementById('tbPassword').value='%s';document.getElementById('form1').submit();", username, password);
        mWeb.post(new Runnable() {
            public void run() {
                mWeb.loadUrl(strJS);
            }
        });
    }

mWeb.loadUrl(strJS);时报错了,报错的内容为“android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application”。
解决办法,是对mWeb的settings进行设置不保存密码“settings.setSavePassword(false);”代码如下:

 

 代码如下 复制代码
@SuppressLint({ "SetJavaScriptEnabled"})
private void initialWeb(){
    WebSettings settings = mWeb.getSettings();
    settings.setSavePassword(false);
    settings.setSaveFormData(false);
    settings.setJavaScriptEnabled(true);
    settings.setBlockNetworkImage(true);
    mWeb.addJavascriptInterface(new JSInterface(), "IFObj");
    mWeb.setWebViewClient(mBlogWebClient);
}

就此,原因找到了,不过“Unable to add window -- token null is not for an application”的错误,并不都是这个导致的。

[!--infotagslink--]

相关文章

  • ps动态环绕动画效果怎么制作

    ps动态环绕动画效果是现在很多人都非常喜欢的,大多数人还不知道ps动态环绕动画效果怎么制作下面文章就给大家介绍下ps怎么制作科技感十足的动态环绕动画效果,一起来看看...2017-07-06
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • vue 实现动态路由的方法

    这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • Vue实现动态查询规则生成组件

    今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,本文主要介绍了Vue动态查询规则生成组件,需要的朋友们下面随着小编来一起学习学习吧...2021-05-27
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • Android用MemoryFile文件类读写进行性能优化

    java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • SQL Server中执行动态SQL

    本文详细讲解了SQLServer中执行动态SQL的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-05-19
  • C#中动态显示当前系统时间的实例方法

    想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25
  • Android 实现钉钉自动打卡功能

    这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • Android 开发之布局细节对比:RTL模式

    下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02