• 第二阶段冲刺-2


    一、说在前面

    1、今天任务:整改新闻首页,用viewpage来区别不同类别的新闻(5h)

    2、明天任务:完善个人信息界面(预计2h)

    3、遇到问题:如果轮播图被向上滑动一点时就失去了轮播功能(所以没改还是固定)

    二、效果

     

     三、代码

    1、ListFragment.java

    package com.me.fragment;
    
    
    import android.content.Intent;
    import android.graphics.Color;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.ImageView;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.appcompat.widget.ListPopupWindow;
    import androidx.fragment.app.Fragment;
    import androidx.viewpager2.widget.ViewPager2;
    
    import com.google.android.material.tabs.TabLayout;
    import com.google.android.material.tabs.TabLayoutMediator;
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    import com.me.ViewModel.NewsViewModel;
    import com.me.adapter.ListPopupWindowAdapter;
    import com.me.adapter.TabAdapter;
    import com.me.domain.New_;
    import com.me.domain.News;
    import com.me.jk.ImgViewGroupLister;
    import com.me.news_2.NewsActivity;
    import com.me.news_2.R;
    import com.me.util.HttpUtil;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ListFragment extends Fragment implements ImgViewGroupLister {
        private ViewPager2 viewPager2;
        private TabLayout tabLayout;
        private List<Fragment> data = new ArrayList<>();
        private EditText mEditText;
        private ImageView imageView;
        private SentUrlTask sentUrlTask;
        private SearchTask searchTask;
        private ListPopupWindow mListPop  ;
        private List<News> lists = new ArrayList<News>();
        private List<News> list = new ArrayList<News>();
        private ListPopupWindowAdapter adapter_ = new ListPopupWindowAdapter();
        private NewsViewModel newsViewModel;
    
        public ListFragment() {
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View inflate = inflater.inflate(R.layout.fragment_list, container, false);
            viewPager2 = inflate.findViewById(R.id.vp_news);
            tabLayout = inflate.findViewById(R.id.tab);
    
            mEditText = inflate.findViewById(R.id.word);
            adapter_.setEditText(mEditText);
            imageView = inflate.findViewById(R.id.iv_search);
            adapter_.setImageView(imageView);
            return inflate;
        }
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
    
            sentUrlTask = new ListFragment.SentUrlTask("http://192.168.1.17:8080/NewsApi/news?method=allnews");
    //        sentUrlTask = new ListFragment.SentUrlTask("http://192.168.43.243:8080/NewsApi/news?method=allnews");
            sentUrlTask.execute();
            searchTask = new SearchTask();
    
            mListPop = new ListPopupWindow(requireContext());
            adapter_.setmListPop(mListPop);
            mListPop.setAdapter(adapter_);
    
            mListPop.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
            mListPop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            mListPop.setAnchorView(mEditText);//设置ListPopupWindow的锚点,即关联PopupWindow的显示位置和这个锚点
    
            mEditText.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    String url = "http://192.168.1.17:8080/NewsApi/news?method=search&word=重";
                    url += s.toString();
                    searchTask.setUrl(url);
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    mListPop.show();
    
                }
            });
    
            mEditText.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    //                mListPop.show();
                }
            });
    
            TabAdapter tabAdapter = new TabAdapter(requireActivity());
    
            data.add(new tuijianFragment());
            data.add(new yvreFragment());
            data.add(new caijingFragment());
            data.add(new tiyvFragment());
    
            data.add(new junshiFragment());
            data.add(new kejiFragment());
            data.add(new shoujiFragment());
            data.add(new shumaFragment());
    
            data.add(new shishangFragment());
            data.add(new youxiFragment());
            data.add(new jiaoyvFragment());
            data.add(new jiankangFragment());
            data.add(new lvyouFragment());
    
            tabAdapter.setData(data);
    
            viewPager2.setAdapter(tabAdapter);
            tabLayout.setTabTextColors(Color.parseColor("#111111"),Color.parseColor("#0371DD"));
            new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
                @Override
                public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                    switch (position){
                        case 0:
                            tab.setText("推荐");
                            break;
                        case 1:
                            tab.setText("娱乐");
                            break;
                        case 2:
                            tab.setText("财经");
                            break;
                        case 3:
                            tab.setText("体育");
                            break;
                        case 4:
                            tab.setText("军事");
                            break;
                        case 5:
                            tab.setText("科技");
                            break;
                        case 6:
                            tab.setText("手机");
                            break;
                        case 7:
                            tab.setText("数码");
                            break;
                        case 8:
                            tab.setText("时尚");
                            break;
                        case 9:
                            tab.setText("游戏");
                            break;
                        case 10:
                            tab.setText("教育");
                            break;
                        case 11:
                            tab.setText("健康");
                            break;
                        case 12:
                            tab.setText("旅游");
                            break;
                        default:
                            tab.setText("null"+position);
                    }
                }
            }).attach();
    
        }
    
    
        @Override
        public void clickImg(int index) {
            Gson gson = new Gson();
            String s = "";
            if (list.get(index).getHistory()!=true){
                list.get(index).setHistory(true);
                s = gson.toJson(list.get(index));
                newsViewModel.insertNews(gson.fromJson(s, New_.class));
            }
            s = gson.toJson(list.get(index));
            Intent intent = new Intent(requireContext(), NewsActivity.class);
            intent.putExtra("news",s);
            startActivity(intent);
        }
    
        private class SearchTask extends AsyncTask<Void,Void,String> {
    
            private  String url;
    
            public void setUrl(String url) {
                this.url = url;
            }
    
            @Override
            protected String doInBackground(Void... voids) {
                return HttpUtil.setUrl(url);
            }
    
            @Override
            protected void onPostExecute(@NonNull String s) {
                super.onPostExecute(s);
                Gson gson = new Gson();
                lists = gson.fromJson(s,new TypeToken<List<News>>(){}.getType());
                adapter_.setList(lists);
            }
        }
    
        private class SentUrlTask extends AsyncTask<Void,Void,String> {
    
            private  String url;
    
            public SentUrlTask(String url) {
                this.url = url;
            }
    
            @Override
            protected String doInBackground(Void... voids) {
                return HttpUtil.setUrl(url);
            }
    
            @Override
            protected void onPostExecute(@NonNull String s) {
                super.onPostExecute(s);
                Gson gson = new Gson();
                System.out.println(s);
                list = gson.fromJson(s, new TypeToken<List<News>>(){}.getType());
    
    
                for (int i = 0; i < 5; i++) {
                    lists.add(list.get(i));
                    adapter_.setList(lists);
                }
            }
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            if (sentUrlTask != null) {
                sentUrlTask.cancel(true);
            }
    
        }
    }
    View Code

     2、list_fragment.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"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical"
        tools:context="com.me.fragment.ListFragment">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="#F00808"
            android:orientation="horizontal">
    
            <EditText
                android:id="@+id/word"
                android:layout_width="340dp"
                android:layout_height="40dp"
                android:layout_marginStart="20dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="5dp"
                android:layout_marginBottom="10dp"
                android:background="@drawable/ev"
                android:ems="18"
                android:hint="新闻关键字"
                android:inputType="textPersonName"
                android:textColorHint="#C0C0C0"
                android:textSize="18dp" />
    
            <ImageView
                android:id="@+id/iv_search"
                android:layout_width="30dp"
                android:layout_height="20dp"
                android:layout_marginTop="20dp"
                android:src="@mipmap/search" />
    
        </LinearLayout>
    
        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab"
            android:layout_width="match_parent"
            app:tabTextAppearance="@style/TabLayoutTextStyle"
            app:tabMode="scrollable"
            android:layout_height="60dp">
    
            <com.google.android.material.tabs.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/TabLayoutTextStyle"
                android:text="Monday" />
    
            <com.google.android.material.tabs.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Tuesday" />
    
            <com.google.android.material.tabs.TabItem
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Wednesday" />
        </com.google.android.material.tabs.TabLayout>
    
        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/vp_news"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    View Code
  • 相关阅读:
    TypeScript reflect-metadata 结合方法装饰器实现的一个自定义语法检查的例子
    使用 TypeScript 自定义装饰器给类的方法增添监听器 Listener
    爬取本blog所有文章链接
    90分钟掌握Python多线程爬虫(全程实战)
    python学习笔记
    Python零基础爬虫教学(实战案例手把手Python爬虫教学)
    开发,功能测试点,注意
    workerman
    tp6 文档
    公共方法
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/13045789.html
Copyright © 2020-2023  润新知