Slightly imitating some functions of today's headlines, for reference only, entertainment only (picture jumps in 3 seconds, infinite carousel, webview, tablayout, listview, Xlistview)

The knowledge points involved are


1. Customize the control and rewrite the related methods of the control

  accomplish:

  (1) Channel management (with drag and drop, animation) Android high imitation channel management ---- NetEase, Toutiao, Tencent Video (GridView that can be dragged) with source code DEMO

  (2) Each field in the news list is arranged according to time, and has a floating effect

  (3) The city information in the city selection list is arranged according to the first letter, and has a floating effect

Note : (1) By rewriting GridView. (2) and (3) By rewriting the ListView, and then judging whether it is at the top through the interface, and changing the state, the code of the DEMO can be clearly understood


2. Use of SQLITE database

  Implementation: Save the channel information set by the user


3. Animation jump method between activities


4. Knowledge about animation animation

  Implementation: channel movement animation in channel management


5. WebView related knowledge and jsoup library to parse HTML

  Realization: viewing and layout of news details, extraction of picture information. (This piece has not been studied in depth, the knowledge has been borrowed from others and put in)


6. Rewrite ViewPager and ImageView

  Implementation: picture browsing and zooming in and out through gestures


7. Use of GestureDetector gesture class and OnGestureListener gesture monitoring class

  Implementation: The news details page is closed according to gesture sliding

------------------------------ The main Activity is a picture and jumps after a few seconds

public class MainActivity extends AppCompatActivity {

    private TextView text_view;
    private Button button_tiyan;
    int time = 3;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
        super.handleMessage(msg);
        if (msg.what == 0){
            if (time > 0){
                time --;
                text_view.setText(time + "秒后进入");
                handler.sendEmptyMessageDelayed(0 , 1000);
            }else{
                Intent intent = new Intent(MainActivity.this , SecondActivity.class);
                startActivity(intent);
                finish();
            }
        }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text_view = (TextView) findViewById(R.id.text_view);
        button_tiyan = (Button) findViewById(R.id.button_tiyan);
	//点击按钮跳转
        button_tiyan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this , SecondActivity.class);
                startActivity(intent);
                finish();
            }
        });
	//发送
        handler.sendEmptyMessageDelayed(0 , 1000);
    }
    @Override
    protected void onPause() {
        super.onPause();
        handler.removeMessages(0);
    }
}
------------------------------ The second Activity is mainly switching between fragments (click the button, fragment switching, no sliding effect note)

Layout this radio_group button, (the button here is a picture) change the background xml

public class SecondActivity extends AppCompatActivity {

    private RadioGroup group;
    private List<Fragment> list = new ArrayList<>();
    private FragmentManager manager;
    private Fragment_shou fragment_shou;
    private Fragment_two fragment_two;
    private Fragment_my fragment_my;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        group = (RadioGroup) findViewById(R.id.radio_group);
        manager = getSupportFragmentManager();
        fragment_shou = new Fragment_shou();
        manager.beginTransaction().add(R.id.fragme_layout , fragment_shou).commit();

        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                FragmentTransaction transaction = manager.beginTransaction();

                if (fragment_shou != null){
                    transaction.hide(fragment_shou);
                }
                if (fragment_two != null){
                    transaction.hide(fragment_two);
                }
                if (fragment_my != null){
                    transaction.hide(fragment_my);
                }

                switch (i){
                    case R.id.button_01:
                        if (fragment_shou == null){
                            fragment_shou = new Fragment_shou();
                            transaction.add(R.id.fragme_layout , fragment_shou);
                        }else{
                            transaction.show(fragment_shou);
                        }
                        break;
                    case R.id.button_02:
                        if (fragment_two == null){
                            fragment_two = new Fragment_two();
                            transaction.add(R.id.fragme_layout , fragment_two);
                        }else{
                            transaction.show(fragment_two);
                        }
                        break;
                    case R.id.button_03:
                        if (fragment_my == null){
                            fragment_my = new Fragment_my();
                            transaction.add(R.id.fragme_layout , fragment_my);
                        }else{
                            transaction.show(fragment_my);
                        }
                        break;

                    default:
                        break;
                }
                transaction.commit();
            }
        });
    }
}
-------------------------------------------------- ----------------------------- The first fragment is also the home page

This is the layout of the fragment,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#D43D3D"
        android:orientation="horizontal"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="今日头条"
            android:textStyle="bold"
            android:textSize="25dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="10dp"
            android:textColor="#ffffff"/>

        <ImageView
            android:onClick="sousuo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@mipmap/sousuokuang"
            android:layout_marginLeft="10dp"
            />
    </LinearLayout>

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        app:tabMode="scrollable"
        app:tabGravity="center"
        app:tabIndicatorColor="#E46262"
        app:tabTextColor="#000000"
        app:tabSelectedTextColor="#E46262">

    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager_shou"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>
</LinearLayout>

public class Fragment_shou extends Fragment {

    private TabLayout tabLayout;
    private List<String> list = new ArrayList<>();
    private ViewPager pager;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_shou , container , false);
        tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
        pager = (ViewPager) view.findViewById(R.id.view_pager_shou);

        return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        list.add("头条");
        list.add("社会");
        list.add("国内");
        list.add("国际");
        list.add("娱乐");
        list.add("体育");
        list.add("军事");
        list.add("科技");
        list.add("财经");
        list.add("时尚");
	//解决tablayout的空数据问题
        pager.setOffscreenPageLimit(list.size());
        pager.setAdapter(new FragmentPagerAdapter(getFragmentManager()) {

            @Override
            public CharSequence getPageTitle(int position) {
                return list.get(position);
            }

            @Override
            public Fragment getItem(int position) {
                NewsFragment newsFragment = new NewsFragment();
                Bundle bundle = new Bundle();
                if (list.get(position).equals("头条")){
  
  
	-=-=-不行的话就用这行转码,再传过去就能使用了
	String s = URLEncoder.encode("福利");
bundle.putString("name" , "top");
                }else if (list.get(position).equals("社会")){
  
  
                    bundle.putString("name" , "shehui");
                }else if (list.get(position).equals("国内")){
  
  
                    bundle.putString("name" , "guonei");
                }else if (list.get(position).equals("国际")){
  
  
                    bundle.putString("name" , "guoji");
                }else if (list.get(position).equals("娱乐")){
  
  
                    bundle.putString("name" , "yule");
                }else if (list.get(position).equals("体育")){
  
  
                    bundle.putString("name" , "tiyu");
                }else if (list.get(position).equals("军事")){
  
  
                    bundle.putString("name" , "junshi"); 
                }else if (list.get(position).equals("科技")){
  
  
                    bundle.putString("name" , "keji");
                }else if (list.get(position).equals("财经")){
  
  
                    bundle.putString("name" , "caijing");
                }else if (list.get(position).equals("时尚")){ 
                   bundle.putString("name" , "shishang");
                }
                newsFragment.setArguments(bundle);
                return newsFragment;
            }
            @Override
            public int getCount() {
  
  
                return list.size();
            }
        });
        //tablayout should be associated with viewpager
        tabLayout.setupWithViewPager(pager);
    }
    // search click event
    public void sousuo(View view){
  
  
    }
}
----------------------------------------- NewsFragment Xlistview used by tablayout pulls up, pulls down

Layout below

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment.bwie.com.newstopandnewswy.view.XListView
        android:id="@+id/xlist_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </fragment.bwie.com.newstopandnewswy.view.XListView>
</LinearLayout>

public class NewsFragment extends Fragment implements XListView.IXListViewListener {

    private XListView xListView;
    private List<UserBean.ResultBean.DataBean> list = new ArrayList<>();
    private MyAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.news_fragment , container , false);
        xListView = (XListView) view.findViewById(R.id.xlist_view);
        //点击事件
        xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent =  new Intent(getActivity() , WebActivity.class);
                intent.putExtra("url" , list.get(i).getUrl());
                getActivity().startActivity(intent);
            }
        });

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //获取,传来的值
        Bundle bundle = getArguments();
        String string = bundle.getString("name" , "top");
        getazong(string);
        //上拉
        xListView.setPullLoadEnable(true);
        //下拉
        xListView.setPullRefreshEnable(true);

        xListView.setXListViewListener(this);

        getLoadEnable();
    }
    //获取总的数据
    public void getazong(final String string) {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String paht = "http://v.juhe.cn/toutiao/index?type="+string+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5";
                try {
                    URL url = new URL(paht);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StreamToString(inputStream, "utf-8");

                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);

                Gson gson = new Gson();
                UserBean userBean = gson.fromJson(s, UserBean.class);
		//list = null;
                Log.i("-------" , "list" + list);
                list.addAll(userBean.getResult().getData());
                //设置适配器
                getadapter();
            }
        };
        asyncTask.execute();
    }

    //上拉
    public void getLoadEnable() {

    }
    //下拉
    public void getRefreshEnable() {

    }
    //设置适配器
    private void getadapter() {
        if (adapter == null){
            adapter = new MyAdapter(getActivity(), list);
            xListView.setAdapter(adapter);
        }else{
            adapter.notifyDataSetChanged();;
        }
    }
    //解析
    private String StreamToString(InputStream inputStream, String s) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, s);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            StringBuilder builder = new StringBuilder();
            String string = "";
            while ((string = bufferedReader.readLine()) != null){
                builder.append(string);
            }
            bufferedReader.close();
            Log.i("builder" , "builder---->" + builder.toString());
            return builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    @Override
    public void onRefresh() {
        getRefreshEnable();
    }

    @Override
    public void onLoadMore() {
        getLoadEnable();
    }
}
-------------------------------------pulltorefreshlistview   上拉,下拉
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/refresh_list_view"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"
        >
    </com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
public class NewsFragment extends Fragment {

    private PullToRefreshListView pullToRefreshListView;
    private ILoadingLayout startLabels;
    private ILoadingLayout endLabels;
    int num = 1;
    List<Bean.ResultsBean> list = new ArrayList<>();
    private MyAdapter myAdapter;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.news_fragment, container, false);

        pullToRefreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);

        return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Bundle bundle = getArguments();
        final String string = bundle.getString("name","fuli");
        getDataFromNet(string);

        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);

        startLabels = pullToRefreshListView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("上拉刷新");
        startLabels.setRefreshingLabel("正在载入...");
        startLabels.setReleaseLabel("放开刷新");

        endLabels = pullToRefreshListView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("下拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                num ++;
                getRefreshData(string);
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                num = 1;
                getData(string);
            }
        });

        pullToRefreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(getActivity() , WebActivity.class);
                intent.putExtra("url" , list.get(i-1).getUrl());
                startActivity(intent);
            }
        });
    }
    private void getDataFromNet(final String string) {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String path = "http://gank.io/api/data/"+string+"/10/1";
                try {
                    URL url = new URL(path);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("GET");
                    urlConnection.setConnectTimeout(5000);
                    urlConnection.setReadTimeout(5000);
                    int responseCode = urlConnection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = urlConnection.getInputStream();
                        String json = streamTostring(inputStream, "utf-8");
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                Gson gson = new Gson();
                Bean bean = gson.fromJson(s, Bean.class);
                list.addAll(0 , bean.getResults());
                myAdapter = new MyAdapter(list, getActivity());
                pullToRefreshListView.setAdapter(myAdapter);
            }
        };
        asyncTask.execute();
    }

    private String streamTostring(InputStream inputStream, String s) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, s);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            StringBuilder builder = new StringBuilder();
            String string = null;
            while ((string = bufferedReader.readLine()) != null) {
                builder.append(string);
            }
            bufferedReader.close();
            return builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    private void getRefreshData(final String string) {
        //1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            //执行耗时的网络操作
            @Override
            protected String doInBackground(Void... voids) {
                String path = "http://gank.io/api/data/"+string+"/10/" + num;
                //1.url
                try {
                    URL url = new URL(path);
                    //2.打开
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    //获取
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = connection.getInputStream();
                        //字节流转为字符串
                        String json = streamToString(inputStream, "utf-8");
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            //主线程,,,解析返回的数据
            @Override
            protected void onPostExecute(String json) {
                //解析
                Gson gson = new Gson();
                Bean bean = gson.fromJson(json, Bean.class);
                //dataDataBean.getNewslist();
                //把解析的数据添加到集合中
                list.addAll(0, bean.getResults());
                setAdapter();
                //刷新停止
                pullToRefreshListView.onRefreshComplete();
                //设置本次刷新的时间
                Date date = new Date(System.currentTimeMillis());
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
                startLabels.setLastUpdatedLabel("上次刷新时间:" + simpleDateFormat.format(date));
            }
        };
        //2.执行任务
        asyncTask.execute();
    }
    public void getData(final String string) {
        //1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            //执行耗时的网络操作
            @Override
            protected String doInBackground(Void... voids) {
                String path = "http://gank.io/api/data/"+string+"/10/" + num;
                //1.url
                try {
                    URL url = new URL(path);
                    //2.打开
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //设置
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    //获取
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        //字节流转为字符串
                        String json = streamToString(inputStream, "utf-8");
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            //主线程,,,解析返回的数据
            @Override
            protected void onPostExecute(String json) {
                //解析
                Gson gson = new Gson();
                Bean dataDataBean = gson.fromJson(json, Bean.class);
                //dataDataBean.getNewslist();
                //把解析的数据添加到集合中
                list.addAll(dataDataBean.getResults());
                setAdapter();
                //刷新停止
                pullToRefreshListView.onRefreshComplete();
            }
        };
        //2.执行任务
        asyncTask.execute();
    }
    private String streamToString(InputStream inputStream,String charset) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String s = null;
            StringBuilder builder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null){
                builder.append(s);
            }

            bufferedReader.close();
            return builder.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return  null;
    }
    private void setAdapter() {
        if (myAdapter == null){
            myAdapter = new MyAdapter(list, getActivity());
            pullToRefreshListView.setAdapter(myAdapter);
        }else {
            myAdapter.notifyDataSetChanged();
        }
    }
}
--------------------------跳转到的WebAtivity
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>
</LinearLayout>

public class WebActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web_activity);

        webView = (WebView) findViewById(R.id.web_view);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");
        //加载
        webView.loadUrl(url);
        //设置
        webView.setWebViewClient(new WebViewClient());

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
    }
}

---------------------------------------第二个fragment

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#EB413D">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="今日要闻"
            android:textSize="20dp"
            android:padding="10dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="10dp"
            android:textColor="#ffffff"/>
    </LinearLayout>
    <android.support.v4.view.ViewPager
        android:layout_below="@id/layout"
        android:id="@+id/view_pager_two"
        android:layout_width="match_parent"
        android:layout_height="200dp">
    </android.support.v4.view.ViewPager>
    <TextView
        android:id="@+id/text_view"
        android:layout_alignBottom="@id/view_pager_two"
        android:layout_width="wrap_content"
        android:text="sdasda"
        android:textSize="20sp"
        android:padding="10dp"
        android:layout_height="wrap_content" />
    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/view_pager_two"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:orientation="horizontal"
        android:layout_alignParentRight="true">
    </LinearLayout>
    <fragment.bwie.com.newstopandnewswy.view.XListView
        android:layout_below="@id/text_view"
        android:id="@+id/xlist_view_two"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </fragment.bwie.com.newstopandnewswy.view.XListView>
</RelativeLayout>
==============================================小圆点的布局选中和未选中的布局
---------------------doc_select
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#ff0000"/>

    <corners android:radius="5dp"/>

    <size android:height="10dp" android:width="10dp"/>

</shape>
-----------------------doc_select_no
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#00ff00"/>

    <corners android:radius="5dp"/>

    <size android:height="10dp" android:width="10dp"/>

</shape>

public class Fragment_two extends Fragment implements XListView.IXListViewListener {

    private ViewPager pager;
    private XListView xListView;
    private TextView textView;
    private LinearLayout linearLayout;
    private List<ImageView> images;
    private List<String> lists = new ArrayList<>();
    private List<UserBean02.NewslistBean> list;
    private int page = 1;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0){
                int currentItem = pager.getCurrentItem();
                pager.setCurrentItem(currentItem+1);
                handler.sendEmptyMessageDelayed(0 , 2000);
            }
        }
    };
    private MyAdapter_Two adapter_two;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_two , container , false);
        pager = (ViewPager) view.findViewById(R.id.view_pager_two);
        xListView = (XListView) view.findViewById(R.id.xlist_view_two);
        textView = (TextView) view.findViewById(R.id.text_view);
        linearLayout = (LinearLayout) view.findViewById(R.id.linear_layout);

        //点击事件
        xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent =  new Intent(getActivity() , WebActivity.class);
                intent.putExtra("url" , list.get(i).getUrl());
                getActivity().startActivity(intent);
            }
        });

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //无限轮播
        wuxianviewpager();
        //上拉
        xListView.setPullLoadEnable(true);
        //下拉
        xListView.setPullRefreshEnable(true);

        xListView.setXListViewListener(this);
        getRefreshEnable();
    }

    private void wuxianviewpager() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String path = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=6&page=1";
                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StreamToString(inputStream, "utf-8");
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);

                Gson gson = new Gson();
                UserBean02 userBean02 = gson.fromJson(s, UserBean02.class);
                list = userBean02.getNewslist();
                for (int i = 0; i < list.size() ; i ++){
                    lists.add(list.get(i).getPicUrl());
                }
                //初始化小圆点
                MyPagerAdapter adapter = new MyPagerAdapter(getActivity(), list, handler);
                pager.setAdapter(adapter);
                //初始化小圆点
                initDoc();
                //设置ViewPager初始展示的位置
                pager.setCurrentItem(lists.size()*10000);
                //发送延时消息
                handler.sendEmptyMessageDelayed(0 , 2000);
                //viewPager页面改变的监听事件
                pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    @Override
                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                    }
                    @Override
                    public void onPageSelected(int position) {
                        textView.setText(list.get(position% list.size()).getTitle());
                        //如果选中了这一页,,,当前小圆点红色,,,否则绿色
                        for (int i = 0;i<images.size();i++){
                            if (i== position%images.size()){
                                images.get(i).setImageResource(R.drawable.doc_select);
                            }else {
                                images.get(i).setImageResource(R.drawable.doc_select_no);
                            }
                        }
                    }
                    @Override
                    public void onPageScrollStateChanged(int state) {
  
  
                    }
                });
            }
        };
        asyncTask.execute();
    }
    private String StreamToString(InputStream inputStream, String s) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, s);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            StringBuilder builder = new StringBuilder();
            String string = "";
            while ((string=bufferedReader.readLine()) != null){
                builder.append(string);
            }
            bufferedReader.close();
            Log.i("builder" , "builder---->" + builder.toString());
            return builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    //初始化小圆点
    private void initDoc() {
        //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置
        images = new ArrayList<>();
        linearLayout.removeAllViews();//清空/移除所有的view

        for (int i = 0;i<lists.size();i++){
            ImageView imageView = new ImageView(getActivity());

            if (i==0){
  
  //显示第一页,,,红的
                imageView.setImageResource(R.drawable.doc_select);
            }else {
  
  //绿的
                imageView.setImageResource(R.drawable.doc_select_no);
            }
            //添加到集合
            images.add(imageView);
            //加入到线性布局中显示
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);

            params.setMargins(5,0,5,0);

            linearLayout.addView(imageView,params);
        }
    }
    //设置适配器
    private void getadapter() {
        if (adapter_two == null){
            adapter_two = new MyAdapter_Two(getActivity(), list);
            xListView.setAdapter(adapter_two);
        }else{
            adapter_two.notifyDataSetChanged();;
        }
    }
    //下拉
    public void getRefreshEnable() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String paht = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=6&page=" + page;
                try {
                    URL url = new URL(paht);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StreamToString(inputStream, "utf-8");

                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);

                Gson gson = new Gson();
                UserBean02 userBean02 = gson.fromJson(s, UserBean02.class);

                list.addAll(0 , userBean02.getNewslist());
                //设置适配器
                getadapter();
                //停止
                xListView.stopRefresh();
                Date date = new Date(System.currentTimeMillis());
                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
                //设置时间
                xListView.setRefreshTime(dateFormat.format(date));
            }
        };
        asyncTask.execute();
    }
    //上拉
    public void getLoadEnable() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String paht = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=6&page=" + page;
                try {
                    URL url = new URL(paht);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setReadTimeout(5000);
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StreamToString(inputStream, "utf-8");

                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);

                Gson gson = new Gson();
                UserBean02 userBean02 = gson.fromJson(s, UserBean02.class);

                list.addAll(userBean02.getNewslist());
                //设置适配器
                getadapter();
                //停止刷新
                xListView.stopLoadMore();
            }
        };
        asyncTask.execute();
    }
    //下拉
    @Override
    public void onRefresh() {
        page ++;
        Log.i("num" , "下拉num---->" + page);
        getRefreshEnable();
    }
    //上拉
    @Override
    public void onLoadMore() {
        page = 1;
        Log.i("num" , "上拉num---->" + page);
        getLoadEnable();
    }
}
---------------------------第三个Fragment
布局
public class Fragment_my extends Fragment {

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_my , container , false);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }
}
--------------------------所有用到的adapter
****FragmentViewPagerAdapter    fragment的适配器
public class FragmentViewPagerAdapter extends FragmentPagerAdapter {

    Context context;
    List<Fragment> list;

    public FragmentViewPagerAdapter(FragmentManager context, List<Fragment> list) {
        super(context);
        this.list = list;
    }

    @Override
    public Fragment getItem(int position) {
        return list.get(position);
    }

    @Override
    public int getCount() {
        return list.size();
    }
}
****MyAdapter    多条目加载的适配器
public class MyAdapter extends BaseAdapter {

    Context context;
    List<UserBean.ResultBean.DataBean> list;
    private static final int IMAGE_ITEM_LEFT = 0;
    private static final int IMAGE_ITEM_RIGHT = 1;

    public MyAdapter(Context context, List<UserBean.ResultBean.DataBean> list) {
        this.context = context;
        this.list = list;

        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        if ((position%2) == 0){
            return IMAGE_ITEM_LEFT;
        }
        return IMAGE_ITEM_RIGHT;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (getItemViewType(i) == IMAGE_ITEM_LEFT){
            ViewHolderLeft holderLeft;
            if (view == null){
                holderLeft = new ViewHolderLeft();
                view = View.inflate(context , R.layout.image_left , null);
                holderLeft.textView = (TextView) view.findViewById(R.id.text_title);
                holderLeft.imageView = (ImageView) view.findViewById(R.id.iamge_01);
                view.setTag(holderLeft);
            }else{
                holderLeft = (ViewHolderLeft) view.getTag();
            }
            holderLeft.textView.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s() , holderLeft.imageView);
        }else{
            ViewHolderRight holderRight;
            if (view == null){
                holderRight = new ViewHolderRight();
                view = View.inflate(context , R.layout.image_right , null);
                holderRight.textView = (TextView) view.findViewById(R.id.text_title);
                holderRight.imageView = (ImageView) view.findViewById(R.id.iamge_02);
                view.setTag(holderRight);
            }else{
                holderRight = (ViewHolderRight) view.getTag();
            }
            holderRight.textView.setText(list.get(i).getTitle());
            ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s() , holderRight.imageView);
        }
        return view;
    }
    class ViewHolderLeft{
        ImageView imageView;
        TextView textView;
    }
    class ViewHolderRight{
        TextView textView;
        ImageView imageView;
    }
}
****MyPagerAdapter 无线轮播的适配器
public class MyPagerAdapter extends PagerAdapter {

    Context context;
    List<UserBean02.NewslistBean> list;
    Handler handler;

    public MyPagerAdapter(Context context, List<UserBean02.NewslistBean> list, Handler handler) {
        this.context = context;
        this.list = list;
        this.handler = handler;

        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, final int position) {
        ImageView imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getPicUrl() , imageView);
        //imageView触摸的监听事件
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                boolean isTiaozhuan = true;
                switch (motionEvent.getAction()){
                    case MotionEvent.ACTION_DOWN://按下
                        Log.i("-----" , "ACTION_DOWN");
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_MOVE://移动
                        Log.i("-----" , "ACTION_MOVE");
                        isTiaozhuan = false;
                        handler.removeCallbacksAndMessages(null);
                        break;
                    case MotionEvent.ACTION_CANCEL://取消
                        Log.i("-----" , "ACTION_CANCEL");
                        isTiaozhuan = false;
                        handler.sendEmptyMessageDelayed(0 , 2000);
                        break;
                    case MotionEvent.ACTION_UP://抬起
                        Log.i("-----" , "ACTION_UP");
                        if (isTiaozhuan){
                            Toast.makeText(context , "跳转页面" , Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(context , WebActivity.class);
                            intent.putExtra("url" , list.get(position%list.size()).getUrl());
                            context.startActivity(intent);
                        }
                        handler.sendEmptyMessageDelayed(1 , 2000);
                        break;
                    default:
                        break;
                }
                //自己处理触摸事件....如果当前位置返回了true,,,点击事件将不会执行,,,表示动作自己处理,不会传递
                return true;
            }
        });
        //添加到容器
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}
----------------------------------imageloader自定义的分类    在清单文件要添加name=".BaseApplicent"
**----BaseApplicent
public class BaseApplicent extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImafeLoaderUtil.initConfig(this);
    }
}
**----ImafeLoaderUtil
public class ImafeLoaderUtil {

    public static void initConfig(Context context) {
        File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPoolSize(3) // default  线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default
                .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量
                // default为使用HASHCODEUIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(new BaseImageDownloader(context)) // default
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建
        ImageLoader.getInstance().init(config);
    }
}
----------------------------xlistview所需的string.xml里的东西
<string name="xlistview_header_hint_normal">下拉刷新</string>
<string name="xlistview_header_hint_ready">松开刷新数据</string>
<string name="xlistview_header_hint_loading">正在加载...</string>
<string name="xlistview_header_last_time">上次更新时间:</string>
<string name="xlistview_footer_hint_normal">查看更多</string>
<string name="xlistview_footer_hint_ready">松开载入更多</string>
************build.gradle的一部分 只供参考 注意要把26改为25
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.+'
    compile 'com.android.support:design:25.3.1'	     <--!tablayout-->
    compile 'com.google.code.gson:gson:2.8.1'        <--!gson-->
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'  <--!imageload-->
}

*1.去标题   在style里面建一个
<style name="NoTitleTheme" parent="Theme.AppCompat.Light.NoActionBar">

</style>
*2.然后在清单里调用,这样是全部都去标题,可以谁去谁调用他
android:theme="@style/NoTitleTheme"


本篇完毕,谢谢观看,对您有帮助请关注,谢谢!!!!!

 
 

Guess you like

Origin blog.csdn.net/qq_40071033/article/details/78022970