当前位置:  编程技术>移动开发
本页文章导读:
    ▪判断字符串是不是重复        判断字符串是否重复 常用删除重复字符串的方法是逐个字符串比较,然后删除。这种方法比较耗时 String[] ridFiltered = new String[rid.length];4 int index = 0;5 for (int i = 0; i < rid.length; i++) {6 if (!this.isE.........
    ▪ 用gcc编译生成动态链接库*so资料的方法        用gcc编译生成动态链接库*.so文件的方法。 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这.........
    ▪ GridView使用       GridView应用 GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接。目录结构main.xml布局文件,存放GridVie.........

[1]判断字符串是不是重复
    来源: 互联网  发布时间: 2014-02-18
判断字符串是否重复

常用删除重复字符串的方法是逐个字符串比较,然后删除。这种方法比较耗时

String[] ridFiltered = new String[rid.length];
4 int index = 0;
5 for (int i = 0; i < rid.length; i++) {
6 if (!this.isExistString(ridFiltered, rid[i])&&!rid[i].equals("")) {
7 ridFiltered[index++] = rid[i];
8 }
9 }
10
11 //还需要用一个方法来判断在结果中是否存在此项,如下
12 /**
13 * 用于查找某个字符串是否在一个字符串数组中
14 * @param dest String[]
15 * @param str String
16 * return boolean
17 */
18
19 public boolean isExistString(String[] dest, String str) {
20 boolean flag = false;
21 for (int i = 0; i < dest.length; i++) {
22 if (str.equals(dest[i])) {
23 flag = true;
24 }
25 }
26 return flag;
27 }

 

该方法既简洁又快,利用Hashset键唯一的特性,轻松去除了重复项

String[] s = {"a","b","c","d","a"};
  List list = Arrays.asList(s);
  Set set = new HashSet(list);
  String []temp = new String[set.size()];
  Iterator ite = set.iterator();
  for (int i = 0; ite.hasNext(); i++) {
    temp[i] = (String) ite.next();
    Log.e(getClass().getName(),temp[i]);
  }


    
[2] 用gcc编译生成动态链接库*so资料的方法
    来源: 互联网  发布时间: 2014-02-18
用gcc编译生成动态链接库*.so文件的方法。
动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助。
1、动态库的编译

下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。

so_test.h:



#include

#include



void test_a();

void test_b();

void test_c();



test_a.c:



#include "so_test.h"



void test_a()

{

printf("this is in test_a...\n");

}



test_b.c:



#include "so_test.h"



void test_b()

{

printf("this is in test_b...\n");

}



test_a.c:



#include "so_test.h"



void test_c()

{

printf("this is in test_c...\n");

}



将这几个文件编译成一个动态库:libtest.so



$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so


2、动态库的链接

在1、中,我们已经成功生成了一个自己的动态链接库libtest.so,下面我们通过一个程序来调用这个库里的函数。程序的源文件为:test.c。

test.c:



#include "so_test.h"



int main()

{

test_a();

test_b();

test_c();



return 0;

}



l 将test.c与动态库libtest.so链接生成执行文件test:



$ gcc test.c -L. -ltest -o test



l 测试是否动态连接,如果列出libtest.so,那么应该是连接正常了



$ ldd test



l 执行test,可以看到它是如何调用动态库中的函数的。
3、编译参数解析
最主要的是GCC命令行的一个选项:
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

l -fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

l -L.:表示要连接的库在当前目录中

l -ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称

l LD_LIBRARY_PATH:这个环境变量指示动态连接器可以装载动态库的路径。

l 当然如果有root权限的话,可以修改/etc/ld.so.conf文件,然后调用 /sbin/ldconfig来达到同样的目的,不过如果没有root权限,那么只能采用输出LD_LIBRARY_PATH的方法了。
4、注意

调用动态库的时候有几个问题会经常碰到,有时,明明已经将库的头文件所在目录 通过 “-I” include进来了,库所在文件通过 “-L”参数引导,并指定了“-l”的库名,但通过ldd命令察看时,就是死活找不到你指定链接的so文件,这时你要作的就是通过修改 LD_LIBRARY_PATH或者/etc/ld.so.conf文件来指定动态库的目录。通常这样做就可以解决库无法链接的问题了。

    
[3] GridView使用
    来源: 互联网  发布时间: 2014-02-18
GridView应用

GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。
以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接。
目录结构

main.xml布局文件,存放GridView控件
<?xml version="1.0" encoding="utf-8"?>
<!--
android:numColumns="auto_fit" ,GridView的列数设置为自动
android:columnWidth="90dp",每列的宽度,也就是Item的宽度
android:stretchMode="columnWidth",缩放与列宽大小同步
android:verticalSpacing="10dp",两行之间的边距,如:行一(NO.0~NO.2)与行二(NO.3~NO.5)间距为10dp
android:horizontalSpacing="10dp",两列之间的边距
-->
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:columnWidth="90dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>
night_item.xml布局文件,存放显示控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:paddingBottom="4dip"
    android:layout_width="fill_parent">
    <ImageView android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_centerHorizontal="true"
        android:id="@+id/itemImage" >
    </ImageView>
    <TextView android:layout_width="wrap_content"
        android:layout_below="@+id/itemImage"
        android:layout_height="wrap_content"
        android:text="TextView01"
        android:layout_centerHorizontal="true"
        android:id="@+id/itemText">
    </TextView>
</RelativeLayout>
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, GvActivity!</string>
    <string name="app_name">九宫图</string>
    <string name="test_name1">跳转到TestActivity1</string>
    <string name="test_name2">跳转到TestActivity2</string>
    <string name="test_name3">跳转到TestActivity3</string>
</resources>
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ljq.gv"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".GvActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".TestActivity1" android:label="@string/test_name1"/>
        <activity android:name=".TestActivity2" android:label="@string/test_name2"/>
        <activity android:name=".TestActivity3" android:label="@string/test_name3"/>
    </application>
    <uses-sdk android:minSdkVersion="7" />

</manifest>
跳转类TestActivity1、TestActivity2、TestActivity3
package com.ljq.gv;

import android.app.Activity;
import android.os.Bundle;

public class TestActivity1 extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
    }
}

package com.ljq.gv;

import android.app.Activity;
import android.os.Bundle;

public class TestActivity2 extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
    }
}

package com.ljq.gv;

import android.app.Activity;
import android.os.Bundle;

public class TestActivity3 extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
    }
}
类GvActivity
package com.ljq.gv;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class GvActivity extends Activity {
    private String texts[] = null;
    private int images[] = null;
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        images=new int[]{R.drawable.p1, R.drawable.p2,
                R.drawable.p3, R.drawable.p4,
                R.drawable.p5,R.drawable.p6,
                R.drawable.p7,R.drawable.p8};
        texts = new String[]{ "宫式布局1", "宫式布局2",
                "宫式布局3", "宫式布局4",
                "宫式布局5", "宫式布局6",
                "宫式布局7", "宫式布局8"};

        GridView gridview = (GridView) findViewById(R.id.gridview);
        ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
        for (int i = 0; i < 8; i++) {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("itemImage", images[i]);
            map.put("itemText", texts[i]);
            lstImageItem.add(map);
        }
       
        SimpleAdapter saImageItems = new SimpleAdapter(this,
                lstImageItem,// 数据源
                R.layout.night_item,// 显示布局
                new String[] { "itemImage", "itemText" },
                new int[] { R.id.itemImage, R.id.itemText });
        gridview.setAdapter(saImageItems);
        gridview.setOnItemClickListener(new ItemClickListener());
    }

    class ItemClickListener implements OnItemClickListener {
        /**
         * 点击项时触发事件
         *
         * @param parent  发生点击动作的AdapterView
         * @param view 在AdapterView中被点击的视图(它是由adapter提供的一个视图)。
         * @param position 视图在adapter中的位置。
         * @param rowid 被点击元素的行id。
         */
        public void onItemClick(AdapterView<?> parent, View view, int position, long rowid) {
            HashMap<String, Object> item = (HashMap<String, Object>) parent.getItemAtPosition(position);
            //获取数据源的属性值
            String itemText=(String)item.get("itemText");
            Object object=item.get("itemImage");
            Toast.makeText(GvActivity.this, itemText, Toast.LENGTH_LONG).show();
           
            //根据图片进行相应的跳转
            switch (images[position]) {
            case R.drawable.p1:
                startActivity(new Intent(GvActivity.this, TestActivity1.class));//启动另一个Activity
                finish();//结束此Activity,可回收
                break;
            case R.drawable.p2:
                startActivity(new Intent(GvActivity.this, TestActivity2.class));
                finish();
                break;
            case R.drawable.p3:
                startActivity(new Intent(GvActivity.this, TestActivity3.class));
                finish();
                break;
            }
           
        }
    }
}
运行结果

转自:http://www.th7.cn/Article/wy/ht/201102/20110223203925.html


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3