首先来看一下我们要做成的而效果:
主页面要显示一个viewpager自动轮播的效果
第二个页面有一个频道管理的效果
废话不多说,直接上代码:
布局文件:
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/main_fl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/main_ll" >
</FrameLayout>
<LinearLayout
android:id="@+id/main_ll"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<TextView
android:id="@+id/main_tv_home"
android:layout_width="0dp"
android:layout_height="match_parent"
android:text="新闻界面"
android:layout_weight="1"
android:gravity="center"
android:background="#0ff"
/>
<TextView
android:id="@+id/main_tv_mine"
android:layout_width="0dp"
android:layout_height="match_parent"
android:text="我的界面"
android:layout_weight="1"
android:gravity="center"
/>
</LinearLayout>
</RelativeLayout>
frag_home.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/vp"
>
</android.support.v4.view.ViewPager>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/vp"
></ListView>
</RelativeLayout>
frag_mine.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24sp"
android:text="我的频道"
android:gravity="center_vertical"
android:padding="10dp"
/>
<GridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frag_mine_gv1"
android:numColumns="5"
></GridView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="24sp"
android:text="更多频道"
android:gravity="center_vertical"
android:padding="10dp"
/>
<GridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/frag_mine_gv2"
android:numColumns="5"
></GridView>
</LinearLayout>
gird_item.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/grid_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="栏目"
android:gravity="center"
/>
</RelativeLayout>
接下来看一下要用到的架包文件:
最后是java文件:
首先是com.example.monthexone包中的MainActivity.java:
public class MainActivity extends FragmentActivity {
TextView tv_home, tv_mine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_home = (TextView) findViewById(R.id.main_tv_home);
tv_mine = (TextView) findViewById(R.id.main_tv_mine);
FragmentMine mine = new FragmentMine();
FragmentHome home = new FragmentHome();
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(R.id.main_fl, mine, "mine");
transaction.hide(mine);
transaction.add(R.id.main_fl, home, "home");
transaction.commit();
tv_home.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getSupportFragmentManager();
FragmentHome home = (FragmentHome) manager
.findFragmentByTag("home");
FragmentMine mine = (FragmentMine) manager
.findFragmentByTag("mine");
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.show(home);
transaction.hide(mine);
transaction.commit();
tv_home.setBackgroundResource(R.color.tv_bg);
tv_mine.setBackgroundColor(Color.WHITE);
}
});
tv_mine.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager = getSupportFragmentManager();
FragmentHome home = (FragmentHome) manager
.findFragmentByTag("home");
FragmentMine mine = (FragmentMine) manager
.findFragmentByTag("mine");
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.show(mine);
transaction.hide(home);
transaction.commit();
tv_mine.setBackgroundResource(R.color.tv_bg);
tv_home.setBackgroundColor(Color.WHITE);
}
});
}
}
MyApp.java:
public class MyApp extends Application{
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(configuration);
}
}
com.example.monthexone.adapter包下的***MyGridAdatper.java:
public class MyGridAdatper extends BaseAdapter {
List<String> list;
Context context;
public MyGridAdatper(List<String> list, Context context) {
super();
this.list = list;
this.context = context;
}
@Override
public int getCount() {
if (list != null) {
return list.size();
}
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView = View.inflate(context, R.layout.gird_item, null);
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.grid_tv);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(list.get(position));
return convertView;
}
public void setData(List<String> list){
this.list = list;
notifyDataSetChanged();
}
static class ViewHolder {
TextView tv;
}
}
MyPagerAdatper.java:
public class MyPagerAdatper extends PagerAdapter{
List<ImageView> list;
public MyPagerAdatper(List<ImageView> list) {
super();
this.list = list;
}
@Override
public int getCount() {
if(list != null){
return Integer.MAX_VALUE;
}
return 0;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
int index = position%list.size();
container.addView(list.get(index));
return list.get(index);
}
}
com.example.monthexone.bean包下的Banner.java:
public class Banner {
String image_url;
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
@Override
public String toString() {
return "Banner [image_url=" + image_url + "]";
}
}
Channel.java:
public class Channel {
String channel_me;
String channel_more;
public String getChannel_me() {
return channel_me;
}
public void setChannel_me(String channel_me) {
this.channel_me = channel_me;
}
public String getChannel_more() {
return channel_more;
}
public void setChannel_more(String channel_more) {
this.channel_more = channel_more;
}
@Override
public String toString() {
return "Channel [channel_me=" + channel_me + ", channel_more="
+ channel_more + "]";
}
}
ChannelData.java:
public class ChannelData {
List<Channel> channel = new ArrayList<Channel>();
public List<Channel> getChannel() {
return channel;
}
public void setChannel(List<Channel> channel) {
this.channel = channel;
}
@Override
public String toString() {
return "ChannelData [channel=" + channel + "]";
}
}
DataVP.java:
public class DataVP {
List<Banner> banner = new ArrayList<Banner>();
public List<Banner> getBanner() {
return banner;
}
public void setBanner(List<Banner> banner) {
this.banner = banner;
}
@Override
public String toString() {
return "DataVP [banner=" + banner + "]";
}
}
com.example.monthexone.fragment包下的***FragmentHome.java:
public class FragmentHome extends Fragment{
ViewPager vp;
DataVP dataVP;
MyPagerAdatper adatperVP;
List<ImageView> list;
@Override
@Nullable
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.frag_home, null);
vp = (ViewPager) view.findViewById(R.id.vp);
initView();
initData();
return view;
}
private void initView() {
initLV();
}
private void initLV() {
// TODO Auto-generated method stub
}
private void initVP() {
list = new ArrayList<ImageView>();
for (int i = 0; i < dataVP.getBanner().size(); i++) {
ImageView iv = new ImageView(getActivity());
iv.setScaleType(ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(dataVP.getBanner().get(i).getImage_url(), iv);
list.add(iv);
}
adatperVP = new MyPagerAdatper(list);
vp.setAdapter(adatperVP);
}
private void initData() {
new AsyncTask<String, String, String>(){
@Override
protected String doInBackground(String... params) {
String jsonVP = NetUtils.getNetData("http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=banner");
Gson gson = new Gson();
dataVP = gson.fromJson(jsonVP, DataVP.class);
return null;
}
@Override
protected void onPostExecute(String result) {
initVP();
super.onPostExecute(result);
}
}.execute();
}
}
FragmentMine.java:
public class FragmentMine extends Fragment{
View view;
GridView gv1;
GridView gv2;
List<String> listMe;
List<String> listMore;
private MyGridAdatper adatper1;
private MyGridAdatper adatper2;
@Override
@Nullable
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = View.inflate(getActivity(), R.layout.frag_mine, null);
initView();
initData();
return view;
}
private void initView() {
// TODO Auto-generated method stub
gv1 = (GridView) view.findViewById(R.id.frag_mine_gv1);
gv2 = (GridView) view.findViewById(R.id.frag_mine_gv2);
adatper1 = new MyGridAdatper(listMe, getActivity());
adatper2 = new MyGridAdatper(listMore, getActivity());
gv1.setAdapter(adatper1);
gv2.setAdapter(adatper2);
gv1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//先把点击的添加到第二个gridView中
listMore.add(listMe.get(position));
//删除第一个GirdView中的数据
listMe.remove(position);
//刷新两个适配器
adatper1.setData(listMe);
adatper2.setData(listMore);
}
});
gv2.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//先把点击的添加到第二个gridView中
listMe.add(listMore.get(position));
//删除第一个GirdView中的数据
listMore.remove(position);
//刷新两个适配器
adatper1.setData(listMe);
adatper2.setData(listMore);
}
});
}
private void initData() {
new AsyncTask<String, String, String>(){
@Override
protected String doInBackground(String... params) {
String channelJson = NetUtils.getNetData("http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=channel");
Gson gson = new Gson();
ChannelData cData = gson.fromJson(channelJson, ChannelData.class);
listMe = new ArrayList<String>();
listMore = new ArrayList<String>();
for (int i = 0; i < cData.getChannel().size(); i++) {
listMe.add(cData.getChannel().get(i).getChannel_me());
listMore.add(cData.getChannel().get(i).getChannel_more());
}
return null;
}
@Override
protected void onPostExecute(String result) {
adatper1.setData(listMe);
adatper2.setData(listMore);
super.onPostExecute(result);
}
}.execute();
}
}
com.example.monthexone.net包下的NetUtils.java:
public class NetUtils {
public static String getNetData(String path){
String result = "";
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if(code == 200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = -1;
byte[] buff = new byte[1024];
while((len = is.read(buff)) != -1){
bos.write(buff, 0, len);
}
result = new String(bos.toByteArray());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
以上就是全部的代码了,新手练习,勿喷!!