只有步骤,备用

ViewPager-PagerAdapter

布局控件

在activity的布局文件中添加控件,控件标记名称为:
android.support.v4.view.ViewPager
有两个子控件:
android.support.v4.view.PagerTitleStrip(会在tab标题的上面,但是不知道怎么随着页面的左右滚动切换,所以暂时不知道如何使用这个控件)
android.support.v4.view.PagerTabStrip(每个tab页面的标题,会随着页面的左右滚动切换)

另外还有各个页面的布局文件,和平时的页面写法一样,不说了

获取控件对象并操作

在activity中使用findViewById()获取到控件的对象
上面说了因为不知道PagerTitleStrip如何自动切换,所以暂时不使用这个控件,并且PagerTabStrip也足够了
获取到PagerTabStrip的对象,使用其方法可以设置tab标题指示器的样式
获取到ViewPager的对象,主要使用其setAdapter()方法

生成各个页面

使用LayoutInflater对象的inflate()方法,加载各个页面的布局文件,获取到各个页面View类型的对象
然后把这些获取到的页面对象放到一个ArrayList<View>里面去,等下提供数据给适配器
另外,把每个页面的tab标题,放到一个ArrayList<String>里面去,也提供给适配器

适配器

阅读全文 »

只有步骤,记录,备忘
只举ImageSwitcher的例子,TextSwitcher基本一样

1、布局文件中添加ImageSwitcher控件
2、activity中findViewById()获取到ImageSwitcher对象
3、需要一个工厂来制造需要显示的ImageView,需要实现ViewFactory接口,并重写接口的makeView()方法,这里使用隐式:

1
2
3
4
5
6
7
8
imageSwitcher.setFactory(new ViewFactory(){
public View makeView(){
//1、new一个ImageView
//2、为ImageView设置一系列属性
//3、return加工好的ImageView对象
}
}
)

4、使用ImageSwitcher对象的setInAnimation()和setOutAnimation()设置动画效果(可选)
5、使用ImageSwitcher对象setImageResource()切换要显示的图片

结束

TextSwitcher的方法和上面一样,都需要实现ViewFactory接口并重写makeView()方法,
在其中new出TextView对象并设置属性然后返回,最后切换视图的方法是setText()

注意:
android3.0以及之后的版本支持fragment技术,低版本要想使用fragment技术需要android.support.v4.app包
获取fragmentManager的方法不同:
3.0以下:getSupportFragmentManager()
3.0以上:getFragmentManager()

fragment以及activity生命周期

附上图片一张:
fragment-activity

学习fragment时碰到的几个名词:

FragmentActivity:

一个android.support.v4.app中的一个继承了Activity的类,如果你要在3.0以下使用fragment就需要让页面继承FragmentActivity而不是Activity,FragmentActivity中包含了3.0以下操作fragment的方法,使用方法同3.0以上一样,只是获取Manager的方法不同

FragmentPagerAdapter

可以作为ViewPager的适配器

ListFragment

列表样式, 自带一个默认的包含ListView控件的布局文件,无需手动重写onCreateView()使用inflat()方法加载自定义布局文件,只需要重写onCreate()方法,在其中用setListAdapter()方法绑定适配器,在绑定适配器的时候给item设置一个布局文件就行了。
若想修改ListView,可以在onCreateView(LayoutInflater, ViewGroup, Bundle)中进行修改,需要注意在自定义的ListFragment对应的布局文件中,必须指定一个 android:id 为 “@android:id/list” 的ListView控件!
当然,用户也可以在ListFragment对应的布局中包含其它的控件。
显示:在主activity中使用new关键字获取对象的引用

阅读全文 »

当listview中同时出现Button或者ImageButton时,只有item中的Button或ImageButton能够获取焦点(能点击),
而整个item无法获取焦点(无法点击)

原因:
因为ImageButton在初始化时把自己设置成setFocusable(true),这样,listView就获取不到焦点。
代码:

1
2
3
4
public ImageButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setFocusable(true);
}

这里还要强调一下:当xml中注册多个 View的时候,当我们点击按键之后,
Android会先判定哪个View setFocusable(true)设置焦点了,如果都设置了,
那么Android 会默认响应在xml中第一个注册的view ,而不是两个都会响应。

所以在item中使用Button或ImageButton时需要留意这个

1
setFocusable(true)

方法、如果item无法响应点击,可以尝试给Button或ImageButton设置

1
setFocusable(false)

1、直接使用指针的表达式,表示使用指针代表的内存地址. (指针存放的数据为内存地址,如同int型变量存放的数据为整数)

2、在指针表达式前加上符号:*,表示使用指针指向的值,也就是指针所代表的内存地址中存储的值. (*也叫取值运算符或间接运算符,与之对应&为地址运算符,放于正常变量之前可获得变量在内存中的地址,也就是获得一个指向这个变量的指针)

3、指针也有数据类型

4、假设int *opt,那么opt++表示指向下一个整数位置的内存地址
,而不是让opt所代表的内存地址在数值上+1;

示例:

1
2
3
4
5
6
7
8
int foo1=10;
int *foo2;
foo2=&foo1;
printf("*foo2:%d\n",*foo2);
printf("foo2:%d\n",foo2);
*foo2=11;
printf("*foo2:%d\n",*foo2);
printf("foo2:%d\n",foo2);

执行结果:

1
2
3
4
*foo2:10
foo2:559162276
*foo2:11
foo2:559162276

解释:
第一行,声明一个整型的变量foo1,其值为10
第二行,声明一个指针foo2,声明指针要使用*符号
第三行,获取变量foo1的内存地址,获取变量的地址要使用&符号,并将内存地址赋给指针foo2,也就是让foo2代表(指向)foo1的值在内存中的存储位置
第四行,输出*foo2,也就是输出指针foo2所代表的内存地址中存储的值
第五行,输出foo2,也就是输出指针foo2所代表的内存地址
第六行,让指针foo2所代表的内存地址中存储的值,变为11(注意这里并没有修改指针foo2所代表的内存地址)
第七行,输出*foo2,也就是输出指针foo2所代表的内存地址中存储的值
第八行,输出foo2,也就是输出指针foo2所代表的内存地址

注意执行结果,foo2所代表的内存地址中的值,通过*foo2=11;被修改后其内存地址并未发生改变,只是改变了该内存地址中存储的值,而指针foo2依然代表原来的内存地址

阅读全文 »

写的比较乱,因为是刚开始学C,没有一个系统的概念,都是想到什么,测试到什么就添加什么,仅供参考
而且可能会有错误的地方,如果有请指出

static:静态

作用域以及声明方法:

1、在函数中声明则仅作用于该函数

1
2
3
void fun(){
static int i;
}

2、在函数外声明则作用于从声明开始到文件末尾

1
2
3
static int i;
void fun(){
}

#extern:引用(其他c文件)

##作用域以及声明方法:
1、可以声明变量或函数,并且不必变量初始化或函数定义实现,即可使用,因为引用变量或函数声明时,会同时引用被引用文件内的初始化语句
2、被引用的变量或函数不能被static修饰
3、相当与引用(复制?)其他文件中的声明和定义/初始化语句到本文件的声明位置
4、在本文件使用extern声明变量或函数时,变量或函数名以及函数返回类型和函数参数列表应与要引用的变量或方法一致(经测试,变量不一致时好像类似声明的指针类型变量,方法暂未测试)
5、在函数内声明则类似局部变量,作用域仅在本函数,在函数外,作用域从声明处到文件末尾
6、如果你是学习C语言的新手,而且暂时只是在使用文本编辑器在写C程序,那么需要注意,在编译有extern语句的C文件时,应该与被引用的文件一起编译(笔者表示在开始时一直在单独编译一个文件所以一直编译报错)
比如下面例子的a1.c和b.c,或者a2.c和b.c,编译的时候应该这样:

1
2
3
4
gcc a1.c b.c
#或者
gcc a2.c b.c
#这样编译器才能找到被extern的变量或函数
阅读全文 »

本文中使用的系统是archlinux,其他系统应该只有安装方法不同

安装

1
2
3
yaourt -S archlinuxcn/create_ap
#或者:
yaourt -S aur/create_ap

终端下创建热点

首先执行ifconfig命令查看网卡端口
下面是我的:

1
2
3
4
5
6
7
8
9
10
ap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
...................
enp4s0f2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu
...................
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
...................
ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>
...................
wlp3s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
...................

解释:

  • ap0:是我用create_ap命令创建出来的ap
  • enp4s0f2:有线网卡
  • lo:暂时不清楚
  • ppp0:这个用ADSL上网的话就会出现
  • wlp3s0:无线网卡

当你没有使用create_ap创建ap时,ifconfig命令不会返回ap0,当你没有使用ADSL上网时(路由器LAN口直连)不会有ppp0

路由器LAN口直连

阅读全文 »

非常简单的一个方法:飞机直达
进入上面的网址,如果你进不去,那就想想自己为什么进不了google,
里面就一个输入框,把Google play里你想下的apk的网页链接填进去
点下面的按钮,马上就出来一个绿色按钮,点击即可直接用浏览器下载这个apk

转自:大侠阿木

假设要得到字符串B在字符串A中出现的次数:

1
2
3
4
5
6
7
8
9
10
11
//假设字符串A和B已声明并赋值
int count=0;
int fromIndex=0;
while(fromIndex!=-1){
fromIndex=A.indexOf(B,fromIndex);
if(fromIndex!=-1){
fromIndex+=B.length();;
count++;
}
}
System.out.println(count);

主要用到的就是一个字符串对象的indexOf()方法

在使用数组的时候要留意,一定要先完整的创建好数组,再对其操作

1
2
3
4
String[] commands=null;
commands = new String[arrayListCommand.size()];
commands = (String[]) arrayListCommand.toArray(commands);
//可以成功cast到String数组
1
2
3
4
5
6
String[] commands=null;
commands = (String[]) arrayListCommand.toArray();
//不能cast到String数组
//这是因为第一句只是声明了commands变量,
//此时它并没有在内存获得存储数据的位置,
//因此无法直接为其赋值