自動輪播+頻道管理 練習

首先來看一下我們要做成的而效果:

主頁面要顯示一個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;
    }
}

以上就是全部的代碼了,新手練習,勿噴!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章