api的话建议独自申请一个,我申请的是聚合数据的新闻的接口,免费的但是只能用两个月
1. 首先准备csdn-XListView,viewpagerindacator(只需要其中的library)的类库,Gson.jar,xUtils.jar
2. 选中新建的工程,单击右键Properties->android->add选中我们需要添加的两个类库,另外把所需要的jar包放在libs目录下
3. Viewpagerindacator中要想达到我们想要的效果,就需要在res->values->style中添加一个style样式
3.1
<stylename="CustomTabPageIndicator"parent="Widget.TabPageIndicator">
<itemname="android:background">@drawable/tab_indicator</item>
<itemname="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
<itemname="android:textSize">14sp</item>
<itemname="android:dividerPadding">8dp</item>
<itemname="android:showDividers">middle</item>
<item name="android:paddingLeft">10dp</item>
<itemname="android:paddingRight">10dp</item>
<itemname="android:fadingEdge">horizontal</item>
<itemname="android:fadingEdgeLength">8dp</item>
</style>
<stylename="CustomTabPageIndicator.Text"parent="android:TextAppearance.Medium">
<itemname="android:typeface">monospace</item>
<itemname="android:textColor">@drawable/selector_tabtext</item>
</style>
3.2 res下新建drawable文件夹新建两个xml文件
selector_tabtext.xml(设置文字的颜色)
<?xmlversion="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_selected="true" android:color="#f00505"/>
<itemandroid:state_pressed="true" android:color="#f00505"/>
<item android:state_focused="true"android:color="#f00505"/>
<itemandroid:color="@android:color/black"/>
</selector>
tab_indicator.xml(设置文字的背景)
<?xmlversion="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/transparent"android:state_pressed="false"android:state_selected="false"/>
<itemandroid:drawable="@android:color/transparent"android:state_pressed="true"android:state_selected="false"/>
<item android:drawable="@drawable/base_tabpager_indicator_selected"android:state_pressed="false"android:state_selected="true"/>
<itemandroid:drawable="@drawable/base_tabpager_indicator_selected"android:state_pressed="true"android:state_selected="true"/>
</selector>
3.3然后再将我们配置style样式应用到我们需要的activity中,在AndroidManifest.xml配置,如下
<?xmlversion="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.topnewsdemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="20"/>
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/StyledIndicators">
<activity
android:name="com.topnews.activity.JokerActivity"
android:label="@string/app_name" >
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.topnews.activity.WebviewActivity"
android:theme="@android:style/Theme.Light.NoTitleBar" />
</application>
</manifest>
3.4其中有一张图片,会因缺少报错,这是文字的背景图片,我会上传到群里去,
4.Viewpagerindacator的具体使用
布局:
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/base_action_bar_bg" >
</com.viewpagerindicator.TabPageIndicator>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</android.support.v4.view.ViewPager>
Activity中使用
// 实例化ViewPager,然后给ViewPager设置Adapter
ViewPager pager = (ViewPager)findViewById(R.id.pager);
FragmentPagerAdapter adapter= new TabPageIndicatorAdapter(
getSupportFragmentManager());
pager.setAdapter(adapter);
// 实例化TabPageIndicator,然后与ViewPager绑在一起(核心步骤)
TabPageIndicator indicator =(TabPageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);
4.1给Viewpagerindacator设置适配器
public classTabPageIndicatorAdapter extends FragmentPagerAdapter {
publicTabPageIndicatorAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// 新建一个Fragment来展示ViewPageritem的内容,并传递参数
Fragment fragment = newNewsFragment();
Bundle args = new Bundle();
args.putString("arg",Constants.TITLE[position]);
fragment.setArguments(args);
return fragment;
}
@Override
public CharSequence getPageTitle(intposition) {
returnConstants.TITLE[position % Constants.TITLE.length];
}
@Override
public int getCount() {
returnConstants.TITLE.length;
}
}
这里的话必须要继承FragmentPagerAdapter,不然会报错,
4. xListview的使用
<me.maxwin.view.XListView
android:id="@+id/lv_joker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"/>
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="#cccccc" />
implements IXListViewRefreshListener,IXListViewLoadMore
这里需要要实现这两个接口就可以,一个上拉加载更多,一个下拉刷新
5. xUtils的使用
public void getBitmap(ImageViewimageView, String url) {
bitmapUtils =BitmapHelp.getBitmapUtils(context);
// 创建BitmapUtils对象,通过xUtils框架获取
bitmapUtils.configDefaultLoadingImage(R.drawable.ic_launcher);
// 设置默认图片
bitmapUtils.configDefaultLoadFailedImage(R.drawable.empty_photo);
// 设置加载失败的默认图片
bitmapUtils.display(imageView,url);
// 加载图片 参数:1.ImageView 2.url
}
6. Gson的使用
public static List<Result>getListFromJson(String strJson) {
List<Result> list =new ArrayList<Result>();;
try {
System.out.println("DAL传输strjson"+strJson);
Gson gson = new Gson();
JsonParser parser = new JsonParser();//初始化json解析器
JsonObject jsonObject = parser.parse(strJson).getAsJsonObject();//json对象
String reason = jsonObject.get("reason").getAsString();//这里的reason是说只要解析到这个就开始进入下面的if
System.out.println("aaaa"+reason);
if (reason!=null) {
System.out.println("DAL--执行GSON");
jsonObject =jsonObject.getAsJsonObject("result");
JsonArray jsonArray =jsonObject.getAsJsonArray("data");//这里的data就是数组中的数据,也就是我们需要的数据,可以对比网上的api进行比对
for (int i = 0; i <jsonArray.size(); i++) {
System.out.println("DAL--执行GSON2");
JsonElement el =jsonArray.get(i); // 获取第i个数组元素
Result obj =gson.fromJson(el, Result.class); // 映射为类实例
list.add(obj);
}//end for
}//end if
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
这里的strjson就是你从网络上获取到的json数据,
其中的Result就是我们写的对象类,也就是model
下载链接