频道管理+上拉下拉刷新+侧拉展示+倒计时跳转
时间:2019-01-18
本文章向大家介绍频道管理+上拉下拉刷新+侧拉展示+倒计时跳转,主要包括频道管理+上拉下拉刷新+侧拉展示+倒计时跳转使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.BaseActivity
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉ActionBar的方法
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(bindLayout());
initView();
initData();
bindEvent();
}
public abstract int bindLayout();
public abstract void initView();
public abstract void initData();
public abstract void bindEvent();
}
2.MainActivity
public class MainActivity extends BaseActivity {
private TextView te;
private SharedPreferences sp;
@Override
public int bindLayout() {
return R.layout.activity_main;
}
@Override
public void initView() {
te = findViewById(R.id.te);
//获取sp 第一个是文件名 第二个参数是文件访问权限
sp = getSharedPreferences("login", Context.MODE_PRIVATE);
}
@Override
public void initData() {
//判断是否自动登录
if(sp.getBoolean("自动登录",false)){
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
//移除
handler.removeCallbacksAndMessages(null);
return ;
}
}
@Override
public void bindEvent() {
te.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("自动登录",true);
edit.commit();
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
//移除
handler.removeCallbacksAndMessages(null);
}
});
//发送消息
handler.sendEmptyMessageDelayed(0,1000);
}
//销毁
@Override
protected void onDestroy() {
super.onDestroy();
//移除
handler.removeCallbacksAndMessages(null);
}
int time=5;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
time--;
if(time>0){
te.setText(time+"");
handler.sendEmptyMessageDelayed(0,1000);
}else{
SharedPreferences.Editor edit = sp.edit();
edit.putBoolean("自动登录",true);
edit.commit();
startActivity(new Intent(MainActivity.this,SecondActivity.class));
finish();
}
break;
}
}
};
}
3.SecondActivity
public class SecondActivity extends BaseActivity {
private RadioGroup radi;
private Frag_Fen f2;
private Frag_Shou f1;
private Frag_Wd f3;
private XListView listView;
private String str="http://www.xieast.com/api/news/news.php?page=2";
private String str1="http://www.xieast.com/api/news/news.php?page=3";
private ArrayList<CeDatas> data;
private CeAdapter adapter;
private ImageView img;
private DrawerLayout draw;
private Dao dao;
@Override
public int bindLayout() {
return R.layout.second_main;
}
@Override
public void initView() {
radi = findViewById(R.id.radi);
radi.check(radi.getChildAt(0).getId());
listView = findViewById(R.id.xlist);
img = findViewById(R.id.ceimg);
draw = findViewById(R.id.draw);
dao = new Dao(SecondActivity.this);
}
@Override
public void initData() {
String ss="http://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&url=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201410%2F05%2F20141005082835_2RTzn.thumb.700_0.jpeg&thumburl=http%3A%2F%2Fimg2.imgtn.bdimg.com%2Fit%2Fu%3D3846895839%2C2711067435%26fm%3D26%26gp%3D0.jpg";
//侧拉的 个人头像设置
ImageLoader.getInstance().displayImage(ss, img);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
f2 = new Frag_Fen();
f1 = new Frag_Shou();
f3 = new Frag_Wd();
transaction.add(R.id.frag,f1);
transaction.add(R.id.frag,f2);
transaction.add(R.id.frag,f3);
transaction.hide(f2).hide(f3).show(f1);
transaction.commit();
//侧拉里面的数据
//启用
listView.setPullLoadEnable(true);
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
//第一次加载数据 判断数据库有没有数据 有就添加 没有不添加
if(dao.query("news",null,null,null,null,null,null).moveToFirst()){
}else{
//没有就添加
for (CeDatas da:data) {
ContentValues contentValues=new ContentValues();
contentValues.put("tit",da.getTitle());
contentValues.put("name",da.getAuthor_name());
contentValues.put("img",da.getThumbnail_pic_s());
dao.insert("news",null, contentValues);
}
}
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
}
});
}else{
//没网的状态下 查询数据库
Cursor cursor = dao.query("news", null, null, null, null, null, null);
data=new ArrayList<>();
if(cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String tit = cursor.getString(cursor.getColumnIndex("tit"));
String img = cursor.getString(cursor.getColumnIndex("img"));
data.add(new CeDatas(name, img,tit));
}while (cursor.moveToNext());
}
cursor.close();
Toast.makeText(SecondActivity.this,"没有网络",Toast.LENGTH_LONG).show();
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
}
}
@Override
public void bindEvent() {
draw.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View view, float v) {
}
@Override
public void onDrawerOpened(@NonNull View view) {
Toast.makeText(SecondActivity.this,"侧拉打开",Toast.LENGTH_LONG).show();
}
@Override
public void onDrawerClosed(@NonNull View view) {
Toast.makeText(SecondActivity.this,"侧拉关闭",Toast.LENGTH_LONG).show();
}
@Override
public void onDrawerStateChanged(int i) {
}
});
radi.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch (i){
case R.id.radi1:
transaction.hide(f2).hide(f3).show(f1);
break;
case R.id.radi2:
transaction.hide(f1).hide(f3).show(f2);
break;
case R.id.radi3:
transaction.hide(f2).hide(f1).show(f3);
break;
}
transaction.commit();
}
});
listView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {//下拉
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
adapter=new CeAdapter(SecondActivity.this,data);
listView.setAdapter(adapter);
onLoad();
}
});
}
}
@Override
public void onLoadMore() {//上拉加载
if(Http.isWork(SecondActivity.this)){
Http.HttpAsyTask(str1, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean1=gson.fromJson(s,CeBean.class);
ArrayList<CeDatas> data1 = ceBean1.getData();
data.addAll(data1);
adapter.notifyDataSetChanged();
onLoad();
}
});
}
}
});
}
//一个方法
private void onLoad() {
//停止加载更多,重置头视图
listView.stopRefresh();
//停止加载更多,重置脚视图
listView.stopLoadMore();
//设置刷新时间
listView.setRefreshTime("刷新成功");
}
}
4.BaseFragment
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindLayout(),container,false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
initData();
bindEvent();
}
//绑定视图
protected abstract int bindLayout();
//绑定组件
protected abstract void initView();
//操作数据
protected abstract void initData();
//设置监听
protected abstract void bindEvent();
}
5.Http
public class Http {
//判断有没有网络状态
public static boolean isWork(Context con){
if(con!=null){
ConnectivityManager manager= (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null){
return info.isAvailable();
}
}
return false;
}
public static void HttpAsyTask(String str, final CallTasks ca){
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... strings) {
return isquest(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
ca.getData(s);
}
}.execute(str);
}
public interface CallTasks{
void getData(String s);
}
public static String isquest(String strUrl){
try {
URL url=new URL(strUrl);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if(code==200){
InputStream stream = connection.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(stream,"utf-8"));
StringBuilder builder=new StringBuilder();
String str="";
while ((str=reader.readLine())!=null){
builder.append(str);
}
return builder.toString();
}
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
6.Fragment第一个页面
public class Frag_Shou extends BaseFragment {
private TabLayout tab;
private ViewPager pager;
private ArrayList<ChannelItem> tabData=new ArrayList<>();
private ArrayList<Fragment> arr;
private TabPagerAdapter adapter;
private ImageView img;
@Override
protected int bindLayout() {
return R.layout.frag_shou;
}
@Override
protected void initView() {
tab = getActivity().findViewById(R.id.tab);
pager = getActivity().findViewById(R.id.pager);
img = getActivity().findViewById(R.id.tabimg);
}
@Override
protected void initData() {
//查询数据库
tabData = DBUtil.getTabData(getActivity());
//加载Fragment
arr = new ArrayList<>();
for (int i = 0; i <tabData.size() ; i++) {
ChannelItem channelItem = tabData.get(i);
String name = channelItem.getName();
if("头条".equals(name)){
arr.add(new Tab_Shou());
}else{
arr.add(new Tab_Null());
}
}
//设置适配器
adapter = new TabPagerAdapter(getActivity().getSupportFragmentManager(), tabData, arr);
pager.setAdapter(adapter);
//绑定 让viewpager和tabLayout关联
tab.setupWithViewPager(pager);
}
@Override
protected void bindEvent() {
//点击跳转频道管理
img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//跳转Activity
Intent intent=new Intent(getActivity(), ChannelActivity.class);
//跳转回传
startActivityForResult(intent,0);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断是不是我们的回传 回传值是0
if(resultCode==0){
//查询数据库中的数据 ,找到我们要展示的Tab标签
tabData = DBUtil.getTabData(getActivity());
//便利数据(对数据进行刷新操作)
for (int i = 0; i <tabData.size() ; i++) {
ChannelItem channelItem = tabData.get(i);
String name = channelItem.getName();
//把数据添加到tab中
tab.addTab(tab.newTab().setText(name));
//设置fragment(可以根据名字创建Fragment)
if("头条".equals(name)){
arr.add(new Tab_Shou());
}else{
arr.add(new Tab_Null());
}
//设置适配器
adapter = new TabPagerAdapter(getActivity().getSupportFragmentManager(), tabData, arr);
pager.setAdapter(adapter);
//绑定
tab.setupWithViewPager(pager);
}
}
}
}
7.TabNull
public class Tab_Shou extends BaseFragment {
private PullToRefreshListView listv;
private Dao dao;
private String str="http://www.xieast.com/api/news/news.php?page=5";
private String str1="http://www.xieast.com/api/news/news.php?page=6";
private String str2="http://www.xieast.com/api/news/news.php?page=7";
private ArrayList<CeDatas> data;
private CeAdapter adapter;
@Override
protected int bindLayout() {
return R.layout.tab_shou;
}
@Override
protected void initView() {
listv = getActivity().findViewById(R.id.pull);
//设置模式
listv.setMode(PullToRefreshBase.Mode.BOTH);
//刷新的时候可以滑动
listv.setScrollingWhileRefreshingEnabled(true);
dao = new Dao(getActivity());
}
@Override
protected void initData() {
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
if(dao.query("shou",null,null,null,null,null,null).moveToFirst()){
}else{
for (CeDatas ca : data) {
ContentValues values=new ContentValues();
values.put("tit",ca.getTitle());
values.put("name",ca.getAuthor_name());
values.put("img",ca.getThumbnail_pic_s());
dao.insert("shou",null,values);
}
}
adapter = new CeAdapter(getActivity(), data);
listv.setAdapter(adapter);
}
});
}else{
//没有网络 请求数据库
Cursor cursor = dao.query("shou", null, null, null, null, null, null);
data=new ArrayList<>();
if(cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String tit = cursor.getString(cursor.getColumnIndex("tit"));
String img = cursor.getString(cursor.getColumnIndex("img"));
data.add(new CeDatas(name,img,tit));
}while (cursor.moveToNext());
}
cursor.close();
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
adapter=new CeAdapter(getActivity(),data);
listv.setAdapter(adapter);
}
}
@Override
protected void bindEvent() {
listv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//下拉刷新
//判断有没有网
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str1, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
data = ceBean.getData();
adapter=new CeAdapter(getActivity(),data);
listv.setAdapter(adapter);
listv.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//上拉加载
if(Http.isWork(getActivity())){
Http.HttpAsyTask(str2, new Http.CallTasks() {
@Override
public void getData(String s) {
Gson gson=new Gson();
CeBean ceBean = gson.fromJson(s, CeBean.class);
ArrayList<CeDatas> data1 = ceBean.getData();
data.addAll(data1);
adapter.notifyDataSetChanged();
//当列表刷新时调用
listv.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(),"没有网络",Toast.LENGTH_LONG).show();
}
}
});
}
}
8.Dao
public class Dao {
private final SQLiteDatabase db;
public Dao(Context con){
MySqlite mySqlite=new MySqlite(con);
db = mySqlite.getWritableDatabase();
}
public long insert(String table, String nullColumnHack, ContentValues values) {
return db.insert(table,nullColumnHack,values);
}
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
return db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);
}
}
9.MySqlite
public class MySqlite extends SQLiteOpenHelper {
public MySqlite(Context context) {
super(context, "bw.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table news(id integer primary key autoincrement,name text,tit text,img text)");
sqLiteDatabase.execSQL("create table shou(id integer primary key autoincrement,name text,tit text,img text)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
10.App
public class App extends ChannelApplication {
@Override
public void onCreate() {
super.onCreate();
String path= Environment.getExternalStorageDirectory().getPath()+"/TuPian";
File file=new File(path);
DisplayImageOptions options=new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.zhan)
.showImageOnFail(R.mipmap.shibai)
.displayer(new CircleBitmapDisplayer())
.bitmapConfig(Bitmap.Config.ARGB_8888)
.build();
ImageLoaderConfiguration loaderConfiguration=new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(options)
.memoryCacheExtraOptions(200,200)
.memoryCacheSize(2 * 1024 * 1024)
.threadPoolSize(3)
.threadPriority(1000)
.diskCache(new UnlimitedDiskCache(file))
.diskCacheFileCount(50)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50 * 1024 *1024)
.build();
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(loaderConfiguration);
}
}
11.CeAdapter
public class CeAdapter extends BaseAdapter {
private Context con;
private ArrayList<CeDatas> arr;
public CeAdapter(Context con, ArrayList<CeDatas> arr) {
this.con = con;
this.arr = arr;
}
@Override
public int getCount() {
return arr.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
switch (getItemViewType(i)){
case 0:
ViewHolder0 vh;
if(view==null){
view=LayoutInflater.from(con).inflate(R.layout.ce_one,null);
vh=new ViewHolder0();
vh.img=view.findViewById(R.id.img);
vh.tit=view.findViewById(R.id.tit);
view.setTag(vh);
}else{
vh= (ViewHolder0) view.getTag();
}
vh.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh.img);
break;
case 1:
ViewHolder1 vh1;
if(view==null){
view= LayoutInflater.from(con).inflate(R.layout.ce_two,null);
vh1=new ViewHolder1();
vh1.img=view.findViewById(R.id.img);
vh1.tit=view.findViewById(R.id.tit);
view.setTag(vh1);
}else{
vh1= (ViewHolder1) view.getTag();
}
vh1.tit.setText(arr.get(i).getTitle());
ImageLoader.getInstance().displayImage(arr.get(i).getThumbnail_pic_s(),vh1.img);
break;
}
return view;
}
static class ViewHolder0{
ImageView img;
TextView tit;
}
static class ViewHolder1{
ImageView img;
TextView tit;
}
}
12.TabPagerAdapter
public class TabPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> arr;
private ArrayList<ChannelItem> tabData;
public TabPagerAdapter(FragmentManager fm, ArrayList<ChannelItem> tabData,ArrayList<Fragment> arr) {
super(fm);
this.arr=arr;
this.tabData=tabData;
}
@Override
public Fragment getItem(int i) {
return arr.get(i);
}
@Override
public int getCount() {
return tabData.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return tabData.get(position).getName();
}
}
13.CeDatas
public class CeDatas {
private String author_name;
private String thumbnail_pic_s;
private String title;
public CeDatas(String author_name, String thumbnail_pic_s, String title) {
this.author_name = author_name;
this.thumbnail_pic_s = thumbnail_pic_s;
this.title = title;
}
@Override
public String toString() {
return "CeDatas{" +
"author_name='" + author_name + '\'' +
", thumbnail_pic_s='" + thumbnail_pic_s + '\'' +
", title='" + title + '\'' +
'}';
}
public String getAuthor_name() {
return author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getThumbnail_pic_s() {
return thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
14.CeBean
public class CeBean {
private ArrayList<CeDatas> data;
private String code;
private String msg;
@Override
public String toString() {
return "CeBean{" +
"data=" + data +
", code='" + code + '\'' +
", msg='" + msg + '\'' +
'}';
}
public ArrayList<CeDatas> getData() {
return data;
}
public void setData(ArrayList<CeDatas> data) {
this.data = data;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
1.
frag_shou
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#fff"
app:tabGravity="fill"
app:tabIndicatorColor="@color/color"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/color"
app:tabTextColor="#000"
/>
<ImageView
android:id="@+id/tabimg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="18dp"
android:src="@mipmap/menu"
/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
1.second_main
<android.support.v4.widget.DrawerLayout
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"></FrameLayout>
<RadioGroup
android:id="@+id/radi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radi1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:background="@drawable/sele"
android:text="首页"
android:textSize="25sp" />
<RadioButton
android:id="@+id/radi2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:background="@drawable/sele"
android:gravity="center"
android:padding="8dp"
android:text="分类"
android:textSize="25sp" />
<RadioButton
android:id="@+id/radi3"
android:background="@drawable/sele"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:padding="8dp"
android:text="我的"
android:textSize="25sp" />
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:orientation="vertical"
android:background="#ccc"
>
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:id="@+id/ceimg"
/>
<com.qy.xlistview.XListView
android:id="@+id/xlist"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></com.qy.xlistview.XListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
- MSBuild的简单介绍与使用
- actionbar详解(二)
- actionbar完全解析(一)
- android galley实现画廊效果
- RavenDB:基于Windows/.NET平台的NoSQL数据库
- 神经网络算法交易:波动预测与定制损失函数
- 贝叶斯深度学习:桥接PyMC3和Lasagne构建层次神经网络
- How does it work in Mono's C# compiler?
- Cross-Origin Resource Sharing协议介绍
- 战斗民族开源神器ClickHouse:一款适合于构建量化回测研究系统的高性能列式数据库(二)
- Microsoft StreamInsight 构建物联网
- 利用 Microsoft StreamInsight 控制较大数据流
- HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
- 看看你是哪种级别的Python程序员(已跪)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 技术篇-调用浏览器访问指定网页,一行代码实现。非Selenium。
- 数据库热备份神器 - XtraBackup
- Python 技术篇-读取文件,将内容保存dict字典中。去掉字符串中的指定字符方法。dict字典的遍历。
- PyQt5 技术篇-plainTextEdit控件获得文本内容方法、设置文本内容方法。
- PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
- PyQt5 技术篇-窗口名、窗口图标的设置方法。
- 101个shell脚本
- PyQt5 图片兼容性问题:"libpng warning: bKGD: invalid.",原因及解决办法。
- 编程语言经典小例题—Python版【持续更新】
- Python+selenium 自动化-切换窗口页签、切换iframe框架。确定页面是否包含iframe方法。
- JavaScript 技术篇-js获取iframe内的元素方法。
- QQ二维码登录API源码
- JavaScript 技术篇-js获取document的几种方式,js获取dom元素的常用方法。
- 不好意思,我膨胀了!shader 入门精要!Cocos Creator 3D Shader !
- JavaScript 技术篇-js获取dom节点、html标签自定义属性的值。