1.完成文本框的自动补全AutoCompleteTextView
(1)AutoCompleteTextView常见方法
clearListSelection():清除选中的列表项;
dismissDropDown():如果存在关闭下拉菜单;
getAdapter():获取适配器。
1.1在values下的String.xml设置多几个值:
G160628_Android07_WidgetPlus
- 张三
- 李四
- 王五
- 王二小
1.2在java类里根据name获取
String.xml里的值,
actv_main_auto = (AutoCompleteTextView) findViewById(R.id.actv_main_auto);
//获取字符串数组
String data[]=getResources().getStringArray(R.array.data);
//适配器
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
//给控件设置适配器
actv_main_auto.setAdapter(adapter);
2.下拉列表
Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。
在java类实现
//给下拉列表设置适配器
final String provinces[]={"湖南省","河南省","海南省"};
int images[]={R.drawable.dog,R.drawable.elephant,R.drawable.fox};
List
3.Listview的基本用法
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
4. 在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示,
只能用TextView视图。
3.1基本实现功能
在java类实现
public class ListActivity extends AppCompatActivity {
private ListView lv_list_names;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
lv_list_names = (ListView) findViewById(R.id.lv_list_names);
final List names=new ArrayList<>();
for (int i = 0; i <100; i++) {
names.add("张"+i);
}
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,names);
lv_list_names.setAdapter(adapter);
//给ListView设置点击事件
lv_list_names.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
Toast.makeText(ListActivity.this, names.get(i), Toast.LENGTH_SHORT).show();
}
});
}
3.2Listview上的下载
点击app名直接跳转到详细信息,点击下载则直接下载
1.写一个实体类
public class MainTag {
public ImageView iv;
public TextView tv;
public Button bt;
}
2.写一个View视图
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/layout_mian2_text" android:layout_width="match_parent" android:layout_height="match_parent" /> LinearLayout>3.写一个View,里面写你要向View视图里添加的控件,这个View视图只是用于写控件的。
package com.example.android_widgetplus2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private int image[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog};
private String text[]={"老一","老二","老三","老四","老五"};
private ListView layout_mian_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2_mian);
layout_mian_text= (ListView) findViewById(R.id.layout_mian2_text);
layout_mian_text.setAdapter(new Mapdasda());
//给id设置监听事件
layout_mian_text.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
//跳转到相对应的详细界面
Toast.makeText(MainActivity.this,"跳转到:"+text[position],Toast.LENGTH_LONG).show();
}
});
}
class Mapdasda extends BaseAdapter {
@Override
public int getCount() {
//获得Vire视图的长度
return text.length;
}
@Override
public Object getItem(int position) {
//获得Text集合里的下标position
return text[position];
}
@Override
public long getItemId(int position) {
//返回所有属性的下标
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
//拿到你要加入的视图
convertView = getLayoutInflater().inflate(R.layout.activity_main, null);
//new一个实体类
MainTag m = new MainTag();
m.iv = (ImageView) convertView.findViewById(R.id.layout_mian_image);
m.tv = (TextView) convertView.findViewById(R.id.tv_item_listview_title);
m.bt = (Button) convertView.findViewById(R.id.layout_mian_button);
//把加入的对象放入试图
convertView.setTag(m);
}
//根据视图拿到对象
MainTag v = (MainTag) convertView.getTag();
//给控件设置内容
v.iv.setImageResource(image[position]);
v.tv.setText(text[position]);
v.bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "正在下载" + text[position], Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
}
3.3Listview的下拉刷新
实现结果:
实现代码如下:
1.1写一个View视图
1.2在java里实现主要的java代码:
package com.example.android_widgetplus2;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/6/9 0009.
*/
public class pulltorefresh extends AppCompatActivity {
private List list;
private PullToRefreshListView pr;
private ArrayAdapter a;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pulltorefresh);
pr = (PullToRefreshListView) findViewById(R.id.layout_mian_pulltorefresh);
list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
list.add("你好"+i);
}
a = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
pr.setAdapter(a);
pr.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
@Override
public void onPullDownToRefresh(PullToRefreshBase refreshView) {
//调用刷新列表
new MyTask().execute();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase refreshView) {
}
});
}
class MyTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] params) {
for (int i = 0; i <5 ; i++) {
//设置刷新后要添加的数据
list.add(0,"老王"+i);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
//用来提示view以刷新
pr.onRefreshComplete();
//通知适配器数据 发生改变
a.notifyDataSetChanged();
}
}
}
3.4 XListview的下拉刷新实现方法和Listview一样,下在一个框架,导入到项目里
实现代码也是一样的。
4.ViewPager
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
写两个小的View
package com.example.android_widgetplus3_1;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;
public class activity_ViewPage extends AppCompatActivity {
private ViewPager res_main_viewPager;
private List list=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity__view_page);
res_main_viewPager = (ViewPager) findViewById(R.id.res_main_ViewPager);
View inflate = getLayoutInflater().inflate(R.layout.frame,null);
View gridlayout = getLayoutInflater().inflate(R.layout.gridlayout, null);
View table=getLayoutInflater().inflate(R.layout.table,null);
list.add(inflate);
list.add(gridlayout);
list.add(table);
res_main_viewPager.setAdapter(new MyAdapter());
}
class MyAdapter extends PagerAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v= list.get(position);
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//super.destroyItem(container, position, object);
View v= list.get(position);
container.removeView(v);
}
}
}