转载。
DynamicBox是一个Android库,能够inflates自定义布局来指示出:
- 正在加载内容
- 显示一个异常
- 或者是一个自定义视图
文件名:dynamicbox-master
简单说明:
支持(可以替换加载中的控件~):
ListView
GridView
ExpandableListView
Activity
FragmentActivity
Fragment
LinearLayout
RelativeLayout
ScrollView
示例 (控件和布局的布局文件或ID赋值方式)
- View
ListView lv = (ListView)findViewById(R.id.listView); DynamicBox box = new DynamicBox(this,lv);
- Layout id
DynamicBox box = new DynamicBox(this,R.layout.activity_activity);
To Show the loading View
box.showLoadingLayout(); //显示加载视图
To Show Internet off View
box.showInternetOffLayout();
To Show Exception View
box.showExceptionLayout();//显示如果没有加载到时的界面
To Show a Custom View
View customView = getLayoutInflater().inflate(R.layout.custom_view, null, false);
box.addCustomView(customView,"greenmonster"); box.showCustomView("greenmonster");
**To set Loading Message **
box.setLoadingMessage("Loading your music ...");
自己使用的方法:
因为是自己新建的项目来复制黏贴的,然后引用包到自己项目的时候报错了
因为android-support-v4自己项目和引用的项目都有,所以重复了,这样以后自己新建拷贝的项目用来引用应该会常出现这个问题~
删除掉新建的包项目,重新引用,就没报错了~
整个界面的初始化和等待:
Activity初始化的时候就可以设置对应的值
DynamicBox box ; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); pojo = new HouseConditionsPojo(); box = new DynamicBox(this,R.layout.house_jj_list_activity); box.setLoadingMessage("Loading content..."); box.setOtherExceptionTitle("Error"); box.setOtherExceptionMessage("An error has occurred while fetching data, please try again ..."); box.setClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ini(); // 访问网络,成功的时候初始化控件 } }); ini(); }
然后是在访问网络返回成功失败时的对应操作
private void ini() { box.showLoadingLayout(); //显示加载中的画面 AsyncHttpClientTool.SearchJJHouses(pojo, new AsyncReturn() { @Override public void onSuccess(String arg0) { box.hideAll(); // 关闭加载中动画 try { init(); //注册控件 控件赋值的呢过 } catch (Exception e) { e.printStackTrace(); } super.onSuccess(arg0); } @Override public void onFailure(Throwable arg0) { box.showExceptionLayout(); //调用访问失败的界面 super.onFailure(arg0); } }); }
对应控件的等待载入:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listview); //加载布局文件 ListView lv = (ListView)findViewById(R.id.listView); //布局中用来替换的控件 // Setup by Box box = new DynamicBox(this,lv); // or new DynamicBox(this,R.id.listView) box.setLoadingMessage("Loading your music ..."); //自定义控件用来替换布局中的替换控件 View emptyCollectionView = getLayoutInflater().inflate(R.layout.activity_listview, null, false); box.addCustomView(emptyCollectionView,"music_not_found"); box.setClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(), "Retry button clicked :)", Toast.LENGTH_SHORT).show(); } }); box.showLoadingLayout(); new Handler().postDelayed(new Runnable() { public void run() { // box.showCustomView("music_not_found"); //当数据获取成功时,展示正确的界面 box.showExceptionLayout();//当数据获取失败时,显示加载失败的界面 } }, 2000); }