来自:OPEN经验库

原帖:http://www.open-open.com/lib/view/open1330132229874.html

Android 应用开发中,采用ListView组件来展示数据是很常用的功能,当一个应用要展现很多的数据时,一般情况下都不会把所有的数据一次就展示出来,而是通过 分页的形式来展示数据,个人觉得这样会有更好的用户体验。因此,很多应用都是采用分批次加载的形式来获取用户所需的数据。例如:微博客户端可能会在用户滑 动至列表底端时自动加载下一页数据,也可能在底部放置一个"查看更多"按钮,用户点击后,加载下一页数据。

下面通过一个Demo来展示ListView功能如何实现:该Demo通过在ListView列表的底部添加一个“查看更多...”按钮来加载新闻(模拟 新闻客户端)分页数据。同时限定每次加载10条记录,但完全加载完数据后,就把ListView列表底部视图“查看更多...”删除。假设加载的数据总数 为 38 条记录。先看下该Demo工程的程序结构图:

其中包 com.andyidea.bean中News.java类是新闻实体类,包com.andyidea.listview中 paginationListViewActivity.java类是用来展示ListView列表。布局layout中包含三个布局文件,分别 为:list_item.xml , loadmore.xml , main.xml 。下面分别贴下源码:

layout中的 list_item.xml源码:

01 <span style="font-size:13px;"><?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout
03   xmlns:android="http://schemas.android.com/apk/res/android"
04   android:layout_width="fill_parent"
05   android:layout_height="fill_parent"
06   android:orientation="vertical">
07   <TextView
08      android:id="@+id/newstitle"
09      android:layout_width="fill_parent"
10      android:layout_height="wrap_content"/>
11   <TextView
12      android:id="@+id/newscontent"
13      android:layout_width="fill_parent"
14      android:layout_height="wrap_content"/>
15 </LinearLayout></span>

layout中loadmore.xml源码:

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout
03   xmlns:android="http://schemas.android.com/apk/res/android"
04   android:layout_width="fill_parent"
05   android:layout_height="fill_parent">
06   <Button  
07       android:id="@+id/loadMoreButton"  
08       android:layout_width="fill_parent"  
09       android:layout_height="wrap_content"
10       android:text="查看更多..." /> 
11 </LinearLayout>

layout中main.xml源码:

01 <?xml version="1.0" encoding="utf-8"?>
02 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03     android:orientation="vertical"
04     android:layout_width="fill_parent"
05     android:layout_height="fill_parent">
06     <ListView
07        android:id="@+id/lvNews"
08        android:layout_width="fill_parent"
09        android:layout_height="wrap_content"/>
10 </LinearLayou

包 com.andyidea.bean中News.java类源码:

01 package com.andyidea.bean;
02   
03 /**
04  * 新闻实体类
05  * @author Andy.Chen
06  * @mail Chenjunjun.ZJ@gmail.com
07  *
08  */
09 public class News {
10       
11     private String title;    //标题
12     private String content;  //内容
13       
14     public String getTitle() {
15         return title;
16     }
17     public void setTitle(String title) {
18         this.title = title;
19     }
20     public String getContent() {
21         return content;
22     }
23     public void setContent(String content) {
24         this.content = content;
25     }
26   
27 }

包com.andyidea.listview中paginationListViewActivity.java类源码:

001 package com.andyidea.listview;
002   
003 import java.util.ArrayList;
004 import java.util.List;
005   
006 import com.andyidea.bean.News;
007   
008 import android.app.Activity;
009 import android.os.Bundle;
010 import android.os.Handler;
011 import android.util.Log;
012 import android.view.View;
013 import android.view.ViewGroup;
014 import android.widget.AbsListView;
015 import android.widget.AbsListView.OnScrollListener;
016 import android.widget.BaseAdapter;
017 import android.widget.Button;
018 import android.widget.ListView;
019 import android.widget.TextView;
020 import android.widget.Toast;
021   
022 public class PaginationListViewActivity extends Activity implements OnScrollListener {
023       
024     private ListView listView;  
025     private int visibleLastIndex = 0;   //最后的可视项索引  
026     private int visibleItemCount;       // 当前窗口可见项总数  
027     private int datasize = 38;          //模拟数据集的条数
028     private PaginationAdapter adapter;  
029     private View loadMoreView;  
030     private Button loadMoreButton;  
031     private Handler handler = new Handler(); 
032       
033     /** Called when the activity is first created. */
034     @Override
035     public void onCreate(Bundle savedInstanceState) {
036         super.onCreate(savedInstanceState);
037         setContentView(R.layout.main);
038           
039         loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);
040         loadMoreButton = (Button)loadMoreView.findViewById(R.id.loadMoreButton);
041         loadMoreButton.setOnClickListener(new View.OnClickListener() {
042               
043             @Override
044             public void onClick(View v) {
045                 loadMoreButton.setText("正在加载中...");   //设置按钮文字
046                 handler.postDelayed(new Runnable() {
047                       
048                     @Override
049                     public void run() {
050                         loadMoreData();
051                         adapter.notifyDataSetChanged();
052                         loadMoreButton.setText("查看更多...");  //恢复按钮文字
053                     }
054                 },2000);
055                   
056             }
057         });
058           
059         listView = (ListView)findViewById(R.id.lvNews);
060         listView.addFooterView(loadMoreView);    //设置列表底部视图
061         initializeAdapter();
062         listView.setAdapter(adapter);
063         listView.setOnScrollListener(this);
064     }
065       
066     @Override
067     public void onScrollStateChanged(AbsListView view, int scrollState) {
068         int itemsLastIndex = adapter.getCount()-1 //数据集最后一项的索引  
069         int lastIndex = itemsLastIndex + 1;
070         if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
071                 && visibleLastIndex == lastIndex) {
072             // 如果是自动加载,可以在这里放置异步加载数据的代码
073         }
074     }
075   
076   
077     @Override
078     public void onScroll(AbsListView view, int firstVisibleItem,
079             int visibleItemCount, int totalItemCount) {
080         this.visibleItemCount = visibleItemCount;
081         visibleLastIndex = firstVisibleItem + visibleItemCount - 1;
082           
083         Log.e("========================= ","========================");
084         Log.e("firstVisibleItem = ",firstVisibleItem+"");
085         Log.e("visibleItemCount = ",visibleItemCount+"");
086         Log.e("totalItemCount = ",totalItemCount+"");
087         Log.e("========================= ","========================");
088           
089         //如果所有的记录选项等于数据集的条数,则移除列表底部视图
090         if(totalItemCount == datasize+1){
091             listView.removeFooterView(loadMoreView);
092             Toast.makeText(this, "数据全部加载完!", Toast.LENGTH_LONG).show();
093         }
094     }
095       
096     /**
097      * 初始化ListView的适配器
098      */
099     private void initializeAdapter(){
100         List<News> news = new ArrayList<News>();
101         for(int i=1;i<=10;i++){
102             News items = new News();
103             items.setTitle("Title"+i);
104             items.setContent("This is News Content"+i);
105             news.add(items);
106         }
107         adapter = new PaginationAdapter(news);
108     }
109       
110     /**
111      * 加载更多数据
112      */
113     private void loadMoreData(){
114         int count = adapter.getCount();
115           
116         if(count+10 <= datasize){
117             for(int i=count+1; i<=count+10; i++){
118                 News item = new News();
119                 item.setTitle("Title"+i);
120                 item.setContent("This is News Content"+i);
121                 adapter.addNewsItem(item);
122             }
123         }else{
124             for(int i=count+1; i<=datasize; i++){
125                 News item = new News();
126                 item.setTitle("Title"+i);
127                 item.setContent("This is News Content"+i);
128                 adapter.addNewsItem(item);
129             }
130         }
131           
132     }
133       
134       
135     class PaginationAdapter extends BaseAdapter{
136           
137         List<News> newsItems;
138           
139         public PaginationAdapter(List<News> newsitems){
140             this.newsItems = newsitems;
141         }
142   
143         @Override
144         public int getCount() {
145             return newsItems.size();
146         }
147   
148         @Override
149         public Object getItem(int position) {
150             return newsItems.get(position);
151         }
152   
153         @Override
154         public long getItemId(int position) {
155             return position;
156         }
157   
158         @Override
159         public View getView(int position, View view, ViewGroup parent) {
160             if(view == null){
161                 view = getLayoutInflater().inflate(R.layout.list_item, null);
162             }
163               
164             //新闻标题
165             TextView tvTitle = (TextView)view.findViewById(R.id.newstitle);
166             tvTitle.setText(newsItems.get(position).getTitle());
167             //新闻内容
168             TextView tvContent = (TextView)view.findViewById(R.id.newscontent);
169             tvContent.setText(newsItems.get(position).getContent());
170               
171             return view;
172         }
173           
174         /**
175          * 添加数据列表项
176          * @param newsitem
177          */
178         public void addNewsItem(News newsitem){
179             newsItems.add(newsitem);
180         }
181           
182     }
183   
184 }

最后,运行程序的结果截图如下:

通过上面的截图,当我们点击"查看更多..."按钮时,就会加载下10条记录,当加载完所有的记录后,ListView的底部视图将会移除。

来自:csdn mayingcai1987

原文:http://blog.csdn.net/mayingcai1987/article/details/6273606

1. 引言:

为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的数据,并渲染到ListView组件中,这样可以极大的改善应用程序的性能和用户体验。

2. 交互:

进入ListView组件,首先预加载N条记录,当用户滑动到最后一条记录显示加载提示信息,并从后台加载N条数据,接着渲染UI界面。

3. 效果图:

4. 程序实现:

[java] view plaincopyprint?
  1. package com.focus.loading;
  2. import android.app.ListActivity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.view.Gravity;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.AbsListView;
  9. import android.widget.BaseAdapter;
  10. import android.widget.LinearLayout;
  11. import android.widget.ListView;
  12. import android.widget.ProgressBar;
  13. import android.widget.TextView;
  14. import android.widget.AbsListView.OnScrollListener;
  15. import android.widget.LinearLayout.LayoutParams;
  16. public class ListViewLoadingActivity extends ListActivity implements
  17. OnScrollListener {
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. /**
  22. * "加载项"布局,此布局被添加到ListView的Footer中。
  23. */
  24. mLoadLayout = new LinearLayout(this);
  25. mLoadLayout.setMinimumHeight(60);
  26. mLoadLayout.setGravity(Gravity.CENTER);
  27. mLoadLayout.setOrientation(LinearLayout.HORIZONTAL);
  28. /**
  29. * 向"加载项"布局中添加一个圆型进度条。
  30. */
  31. ProgressBar mProgressBar = new ProgressBar(this);
  32. mProgressBar.setPadding(0, 0, 15, 0);
  33. mLoadLayout.addView(mProgressBar, mProgressBarLayoutParams);
  34. /**
  35. * 向"加载项"布局中添加提示信息。
  36. */
  37. TextView mTipContent = new TextView(this);
  38. mTipContent.setText("加载中...");
  39. mLoadLayout.addView(mTipContent, mTipContentLayoutParams);
  40. /**
  41. * 获取ListView组件,并将"加载项"布局添加到ListView组件的Footer中。
  42. */
  43. mListView = getListView();
  44. mListView.addFooterView(mLoadLayout);
  45. /**
  46. * 组ListView组件设置Adapter,并设置滑动监听事件。
  47. */
  48. setListAdapter(mListViewAdapter);
  49. mListView.setOnScrollListener(this);
  50. }
  51. public void onScroll(AbsListView view, int mFirstVisibleItem,
  52. int mVisibleItemCount, int mTotalItemCount) {
  53. mLastItem = mFirstVisibleItem + mVisibleItemCount - 1;
  54. if (mListViewAdapter.count > mCount) {
  55. mListView.removeFooterView(mLoadLayout);
  56. }
  57. }
  58. public void onScrollStateChanged(AbsListView view, int mScrollState) {
  59. /**
  60. * 当ListView滑动到最后一条记录时这时,我们会看到已经被添加到ListView的"加载项"布局, 这时应该加载剩余数据。
  61. */
  62. if (mLastItem == mListViewAdapter.count
  63. && mScrollState == OnScrollListener.SCROLL_STATE_IDLE) {
  64. if (mListViewAdapter.count <= mCount) {
  65. mHandler.postDelayed(new Runnable() {
  66. @Override
  67. public void run() {
  68. mListViewAdapter.count += 10;
  69. mListViewAdapter.notifyDataSetChanged();
  70. mListView.setSelection(mLastItem);
  71. }
  72. }, 1000);
  73. }
  74. }
  75. }
  76. class ListViewAdapter extends BaseAdapter {
  77. int count = 10;
  78. public int getCount() {
  79. return count;
  80. }
  81. public Object getItem(int position) {
  82. return position;
  83. }
  84. public long getItemId(int position) {
  85. return position;
  86. }
  87. public View getView(int position, View view, ViewGroup parent) {
  88. TextView mTextView;
  89. if (view == null) {
  90. mTextView = new TextView(ListViewLoadingActivity.this);
  91. } else {
  92. mTextView = (TextView) view;
  93. }
  94. mTextView.setText("Item " + position);
  95. mTextView.setTextSize(20f);
  96. mTextView.setGravity(Gravity.CENTER);
  97. mTextView.setHeight(60);
  98. return mTextView;
  99. }
  100. }
  101. private LinearLayout mLoadLayout;
  102. private ListView mListView;
  103. private ListViewAdapter mListViewAdapter = new ListViewAdapter();
  104. private int mLastItem = 0;
  105. private int mCount = 41;
  106. private final Handler mHandler = new Handler();
  107. private final LayoutParams mProgressBarLayoutParams = new LinearLayout.LayoutParams(
  108. LinearLayout.LayoutParams.WRAP_CONTENT,
  109. LinearLayout.LayoutParams.WRAP_CONTENT);
  110. private final LayoutParams mTipContentLayoutParams = new LinearLayout.LayoutParams(
  111. LinearLayout.LayoutParams.WRAP_CONTENT,
  112. LinearLayout.LayoutParams.WRAP_CONTENT);
  113. }

来自:51CTO论坛

原文:http://mobile.51cto.com/android-265878.htm

对于做Android应用程序来说,ListView一定用得非常多,经常解析xml文件然后在ListView中显示,往往我们需要让它动态地加载内容,也就是不一次性地加载完成,对于手机来说,这点很重要!笔者之前也是弄的不明白,用的时候直接在网上找代码,复制粘贴,再修改一下就是自己的了,笔者的这个小Demo灵感来自于新浪或者腾讯微博手机客户端,比如第一页加载十条Item,当翻到最后一个Item的时候,会出来一个Button,当点击Button的时候就会继续加载更多的,当然如果不点,就不会加载的,节约用户流量,先看效果图

如果觉得满意的话就继续看下面的代码吧,笔者这里没有用到main.xml文件,全部在java文件中定义的,如果理解了的话自己可以在xml文件里面写布局

  1. package com.focus.loading;
  2. import android.app.ListActivity;
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.view.Gravity;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.ViewGroup;
  9. import android.view.ViewGroup.LayoutParams;
  10. import android.widget.AbsListView;
  11. import android.widget.AbsListView.OnScrollListener;
  12. import android.widget.BaseAdapter;
  13. import android.widget.Button;
  14. import android.widget.LinearLayout;
  15. import android.widget.ListView;
  16. import android.widget.ProgressBar;
  17. import android.widget.TextView;
  18. public class ListViewActivity extends ListActivity implements OnScrollListener {
  19. private LinearLayout mLoadLayout;
  20. private LinearLayout mProgressLoadLayout;
  21. private ListView mListView;
  22. private ListViewAdapter mListViewAdapter = new ListViewAdapter();
  23. private int mLastItem = 0;
  24. private int mCount = 41;
  25. private final Handler mHandler = new Handler();// 在Handler中加载数据
  26. private final LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
  27. LinearLayout.LayoutParams.WRAP_CONTENT,
  28. LinearLayout.LayoutParams.WRAP_CONTENT);
  29. int scrollState;// 全局变量,用来记录ScrollView的滚动状态,1表示开始滚动,2表示正在滚动,0表示滚动停止
  30. int visibleItemCount;// 当前可见页面中的Item总数
  31. @Override
  32. public void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. /**
  35. * "加载项"布局,此布局被添加到ListView的Footer中。
  36. */
  37. mLoadLayout = new LinearLayout(this);
  38. mLoadLayout.setMinimumHeight(30);
  39. mLoadLayout.setGravity(Gravity.CENTER);
  40. mLoadLayout.setOrientation(LinearLayout.VERTICAL);
  41. /*
  42. * 当点击按钮的时候显示这个View,此View使用水平方式布局,左边是一个进度条,右边是文本,默认设为不可见
  43. */
  44. mProgressLoadLayout = new LinearLayout(this);
  45. mProgressLoadLayout.setMinimumHeight(30);
  46. mProgressLoadLayout.setGravity(Gravity.CENTER);
  47. mProgressLoadLayout.setOrientation(LinearLayout.HORIZONTAL);
  48. ProgressBar mProgressBar = new ProgressBar(this);
  49. mProgressBar.setPadding(0, 0, 15, 0);
  50. mProgressLoadLayout.addView(mProgressBar, mLayoutParams);// 为布局添加进度条
  51. TextView mTipContent = new TextView(this);
  52. mTipContent.setText("加载中...");
  53. mProgressLoadLayout.addView(mTipContent, mLayoutParams);// 为布局添加文本
  54. mProgressLoadLayout.setVisibility(View.GONE);// 默认设为不可见,注意View.GONE和View.INVISIBLE的区别
  55. mLoadLayout.addView(mProgressLoadLayout);// 把之前的布局以View对象添加进来
  56. final Button button = new Button(this);
  57. button.setText("加载更多");
  58. // 添加按钮
  59. mLoadLayout.addView(button, new LayoutParams(LayoutParams.FILL_PARENT,
  60. LayoutParams.WRAP_CONTENT));
  61. button.setOnClickListener(new OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. if (mLastItem == mListViewAdapter.count
  65. && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
  66. // 当点击时把带进度条的Layout设为可见,把Button设为不可见
  67. mProgressLoadLayout.setVisibility(View.VISIBLE);
  68. button.setVisibility(View.GONE);
  69. if (mListViewAdapter.count <= mCount) {
  70. mHandler.postDelayed(new Runnable() {
  71. @Override
  72. public void run() {
  73. mListViewAdapter.count += 10;
  74. mListViewAdapter.notifyDataSetChanged();
  75. mListView.setSelection(mLastItem
  76. - visibleItemCount + 1);
  77. // 获取数据成功时把Layout设为不可见,把Button设为可见
  78. mProgressLoadLayout.setVisibility(View.GONE);
  79. button.setVisibility(View.VISIBLE);
  80. }
  81. }, 2000);
  82. }
  83. }
  84. }
  85. });
  86. mListView = getListView();
  87. mListView.addFooterView(mLoadLayout);
  88. setListAdapter(mListViewAdapter);
  89. mListView.setOnScrollListener(this);
  90. }
  91. @Override
  92. public void onScroll(AbsListView view, int firstVisibleItem,
  93. int visibleItemCount, int totalItemCount) {
  94. this.visibleItemCount = visibleItemCount;
  95. mLastItem = firstVisibleItem + visibleItemCount - 1;
  96. if (mListViewAdapter.count > mCount) {
  97. mListView.removeFooterView(mLoadLayout);
  98. }
  99. }
  100. @Override
  101. public void onScrollStateChanged(AbsListView view, int scrollState) {
  102. this.scrollState = scrollState;
  103. }
  104. class ListViewAdapter extends BaseAdapter {
  105. int count = 10;
  106. public int getCount() {
  107. return count;
  108. }
  109. public Object getItem(int position) {
  110. return position;
  111. }
  112. public long getItemId(int position) {
  113. return position;
  114. }
  115. public View getView(int position, View view, ViewGroup parent) {
  116. TextView mTextView;
  117. if (view == null) {
  118. mTextView = new TextView(ListViewActivity.this);
  119. } else {
  120. mTextView = (TextView) view;
  121. }
  122. mTextView.setText("Item " + position);
  123. mTextView.setTextSize(20f);
  124. mTextView.setGravity(Gravity.CENTER);
  125. mTextView.setHeight(60);
  126. return mTextView;
  127. }
  128. }
  129. }

【编辑推荐】

Android ListView详解

使用ListView 显示数据

Android开发:自定义GridView/ListView数据源

Android开发:实现带图片和checkbox的listview

Android开发:实现带图片和checkbox的listview

Android中ListView数据处理优化相关推荐

  1. Android中ListView的优化

    ListView的优化方案有很多,主要是以下几点         1.  重用了convertView,减少了内存消耗.通过判断convertView是否为null,是的话就需要产生一个ViewHol ...

  2. android中Listview的优化技巧

    2019独角兽企业重金招聘Python工程师标准>>> 减少内存中view对象的创建个数(明显提高效率)       复用历史缓存的view对象,减少Android内存消耗 减少子孩 ...

  3. ym——Android之ListView性能优化

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android之ListView性能优化 假设有看过我写过的15k面试题的朋友们一定知 ...

  4. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

  5. android listview 数据同步,android中ListView数据刷新时的同步方法

    本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: public class Main extends BaseActivity { priv ...

  6. Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

    Android中ListView选中事件setOnItemSelectedListener无反应不生效问题 在学习Android中ListView组件时,android模拟器运行app时,发现点击有反 ...

  7. android listview 分析,Android中ListView用法实例分析

    本文实例分析了Android中ListView用法.分享给大家供大家参考,具体如下: 通过在Layout中添加ListView Widget可以达到在页面布局具有列表效果的交互页面.在这里通过举例来说 ...

  8. android listview高级,Android中Listview点赞功能的实现

    最近这段时间一直在看Android,利用Listview去实现点赞功能,下面给大家介绍下基本思路. 基本思路: 进入界面–>获取数据–> 在Listview中显示–> 通过map集合 ...

  9. Android 使用Listview的优化

    Listview是Android中很重要的一个组件,在开发过程中使用到的Listview能站到30%,在新手开发过程中,往往会忽略对Listview的优化,在上一个项目的开发中,确实用到了很多List ...

最新文章

  1. antd Form.Item 中如何获取到Select的label值
  2. CXF 调用 .net webservice
  3. [转]JDK里的设计模式
  4. python自学网站 知乎-知乎千赞回答 | 为什么自学python看不进去?
  5. 安装iis,php,mysql总结
  6. Centos5.5安装使用Xen
  7. 【SICP练习】79 练习2.51
  8. 解决StreamReader读取中文出现乱码的问题
  9. 鸿蒙os编码_如何看待鸿蒙OS代码示例?
  10. HBase性能优化方法总结
  11. 检测多边形是否重叠_只要保留定位感知通道,目标检测模型也能剪枝70%参数
  12. OpenSL ES录音流程(一)
  13. 18. 树的子结构(C++版本)
  14. OpenCV_ImageMatching with SURF and SIFT(使用SURF和 SIFT进行图像匹配 对比)
  15. java web登录代码_Java Web 登录页面的实现代码实例
  16. 自己制作机器学习训练和测试使用的二进制数据集(C++)
  17. meltdown linux检测,Spectre ampamp; Meltdown漏洞检测工具
  18. Spring Boot:项目前端vue环境搭建
  19. 遇到问题--python--BLOB/TEXT column 'code' used in key specification without a key length
  20. Similarity Reasoning and Filtration for Image-Text Matching

热门文章

  1. 边框的复合写法(HTML、CSS)
  2. 实验4-1-7 特殊a串数列求和 (20 分)
  3. Open3d之非阻塞可视化
  4. php字符串替换多余逗号_PHP字符过滤函数去除字符串最后一个逗号(rtrim)_php技巧...
  5. 转载关于使用Ant打包Flex的一些脚本
  6. 【计算机本科补全计划】Mysql 学习小计(3)
  7. Android第三十三期 - Dialog的应用
  8. Talking Data副总裁高铎:我们如何赋予大数据生命力
  9. 数字后端基本概念介绍——Routing Blockage
  10. 机器人 考研 计算机专业,机器人工程考研方向