仿今日头条功能汇总

来看效果 和功能实现用到的依赖

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
*

一、主页面布局代码

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android

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

<FrameLayout
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>
<RadioGroup
    android:id="@+id/radioGroup"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RadioButton
        android:id="@+id/mBut1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:button="@null"
        android:drawableTop="@drawable/sel"
        android:gravity="center"
        android:checked="true"
        android:text="首页" />
    <RadioButton
        android:id="@+id/mBut2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:button="@null"
        android:drawableTop="@drawable/sel"
        android:gravity="center"
        android:text="视频" />
    <RadioButton
        android:id="@+id/mBut3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:button="@null"
        android:gravity="center"
        android:drawableTop="@drawable/sel"
        android:text="我的" />
</RadioGroup>

二、写继承类

/**

  • @Auther: Mr.Zhao
  • @Date: 2019/1/7 14:28:39
  • @Description:
    */
    //这里一点记得加abstract

public abstract class BaseActivity extends FragmentActivity {

@Override
protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //绑定布局的方法
    setContentView(bindLayout());
    initView();//找控件
    initData();//给控件设置数据(位置不要写反了!!!)
    bindEvent();


}
//设置监听的方法
protected abstract void bindEvent();

//操作数据的方法(请求网络)
protected abstract void initData();

//绑定组件的方法
protected abstract void initView();

public abstract int bindLayout();
protected <T extends View> T bindView(int resid){
    return findViewById(resid);
}

}

三、主页面代码

//继承上
public class MainActivity extends BaseActivity {

private RadioGroup group;
private Frag01 frag01;
private Frag02 frag02;
private Frag03 frag03;
private FragmentManager manager;
private FrameLayout pager;

@Override
protected void bindEvent() {
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            //得到管理类
            FragmentTransaction transaction = manager.beginTransaction();

            switch (checkedId){
                case R.id.mBut1:
                    transaction.show(frag01)
                            .hide(frag02)
                            .hide(frag03);
                    break;
                case R.id.mBut2:
                    transaction.show(frag02)
                            .hide(frag01)
                            .hide(frag03);
                    break;
                case R.id.mBut3:
                    transaction.show(frag03)
                            .hide(frag01)
                            .hide(frag02);
                    break;
            }
            transaction.commit();
        }
    });
}

@Override
protected void initData() {
//创建三个Frag类 继承BaseFragment
    frag01 = new Frag01();
    frag02 = new Frag02();
    frag03 = new Frag03();
    manager = getSupportFragmentManager();
    manager.beginTransaction()
            .add(R.id.pager,frag01)
            .add(R.id.pager,frag02)
            .add(R.id.pager,frag03)
            .show(frag01)
            .hide(frag02)
            .hide(frag03).commit();
}

//找控件

@Override
protected void initView() {
    group = findViewById(R.id.radioGroup);
    pager = findViewById(R.id.pager);
}
//找布局
@Override
public int bindLayout() {
    return R.layout.activity_main;
}

}

Frag继承的BaseFrament

//记得加静态
public abstract class BaseFragment extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(bindLayout(),container,false);

}
//绑定视图
protected abstract int bindLayout();

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    initView();
    initData();
    bindEvent();
    
}
//设置监听
protected abstract void bindEvent();
//操作数据
protected abstract void initData();
//绑定组件
protected abstract void initView();

protected <T extends View > T bindView(int resId){
    return (T) getView().findViewById(resId);
}
}

**

以上完成了Fragment下导航栏切换
Mainactivity继承BaseActivity
Frag继承BaseFragment

**

四、下面看Frag01里功能,先看布局

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android

android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorPrimary"
android:orientation="vertical"
android:layout_height="match_parent">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal">
    <android.support.design.widget.TabLayout
        android:id="@+id/tab"
        android:layout_width="0dp"
        android:layout_weight="1"
        app:tabMode="scrollable"
        android:layout_height="match_parent"/>
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/image"
        android:src="@drawable/people_flase"/>
</LinearLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/ppager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

五、在Frag01总 完成上导航栏显示结合Viwepager, 跳转到频道管理

//继承类

public class Frag01 extends BaseFragment {

private TabLayout tabLayout;
private ViewPager pager;
private ImageView imageView;
private ArrayList<Fragment> listP;
private ArrayList<String> ListT;
private TabPagerAdapter adapter;

@Override
protected int bindLayout() {
    return R.layout.frag01;
}

@Override
protected void bindEvent() {
    //点击跳转到频道管理
    imageView.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), TwoActivty.class);
            intent.putStringArrayListExtra("key",ListT);
            startActivityForResult(intent, 100);
        }
    });
}

@Override
protected void initData() {
    //先是Viewpager的数据
    listP = new ArrayList<>();
    listP.add(new Tab01());
    listP.add(new Tab02());
    //tab的数据
    ListT = new ArrayList<>();
    for (int t = 0; t <listP.size();t++){
        ListT.add("小阿辰" + t );
    }
    adapter = new TabPagerAdapter(getActivity().getSupportFragmentManager(), listP, ListT);
    pager.setAdapter(adapter);
    //关联
    tabLayout.setupWithViewPager(pager);

}

@Override
protected void initView() {
    tabLayout = bindView(R.id.tab);
    pager = bindView(R.id.ppager);
    imageView = bindView(R.id.image);

}
//接收回传值

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode==200){
        //取出集合
        ArrayList<String> listThew = data.getStringArrayListExtra("key");
        ///清除所有页面和数据
        ListT.clear();
        listP.clear();
        tabLayout.removeAllTabs();
        //合并集合
        ListT.addAll(listThew);
        //把数据设置给tab
        for (int i=0;i<ListT.size();i++){
            //创建一个tab
            TabLayout.Tab tab = tabLayout.newTab();
            //给tab设置标题
            tab.setText(ListT.get(i));
            ///把新的tab放进tabLayout中
            tabLayout.addTab(tab);
            //重新填装fragment
            String ss = ListT.get(i);
            if (i==0){
                listP.add(new Tab01());
            }else{
                listP.add(new Tab02());
            }
        }
        //刷新适配器
        adapter.notifyDataSetChanged();
        tabLayout.setupWithViewPager(pager);
    }

}

}

六、TabPagerAdapter适配器

public class TabPagerAdapter extends FragmentPagerAdapter {

private ArrayList<Fragment> listP;
private ArrayList<String> listT;

public TabPagerAdapter(FragmentManager fm, ArrayList<Fragment> listP, ArrayList<String> listT) {
    super(fm);
    this.listP = listP;
    this.listT = listT;
}

@Override
public Fragment getItem(int i) {
    return listP.get(i);
}

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

//设置了表头这里不能忘!!!
@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return listT.get(position);
}

}

七、从Frag01中跳转到的TwoActivity 在这里实现

在这里插入图片描述
//继承BaseActivity 接口点击
public class TwoActivty extends BaseActivity implements View.OnClickListener {

private GridView G1;
private GridView G2;
private ArrayList<String> list1,list2;
private GridAdapter adapter1,adapter2;

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.finish:
        case R.id.backs:
            Intent intent = new Intent();
            intent.putStringArrayListExtra("key",list1);
            setResult(200,intent);
            finish();//注意一定要关闭页面,不然没效果
            break;
    }
}

@Override
protected void bindEvent() {
    G1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //得到我们点击的条目的内容
            String str = list1.get(position);
            //删除内容
            list1.remove(position);
            //把内容添加到list2中
            list2.add(str);
            adapter1.notifyDataSetChanged();
            adapter2.notifyDataSetChanged();
        }
    });
    //点击条目切换
    G2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //得到我们点击的条目的内容
            String str = list2.get(position);
            //删除内容
            list2.remove(position);
            //把内容添加到list2中
            list1.add(str);
            adapter1.notifyDataSetChanged();
            adapter2.notifyDataSetChanged();
        }
    });
}

@Override
protected void initData() {
    Intent intent = getIntent();
    list1 = intent.getStringArrayListExtra("key");
    //g2的数据
    list2 = new ArrayList<>();
    for (int i =0;i<10;i++){
        list2.add("阿辰是个猪"+i);
    }
    //由于t1中的数据t2肯定没有,所以我们要把t2中和T1一样的数据删掉
    adapter1 = new GridAdapter(list1, TwoActivty.this);
    adapter2 = new GridAdapter(list2, TwoActivty.this);
    //设置适配器
    G1.setAdapter(adapter1);
    G2.setAdapter(adapter2);
}

@Override
protected void initView() {
    G1 = bindView(R.id.G1);
    G2 = bindView(R.id.G2);
    bindView(R.id.finish).setOnClickListener(this);
    bindView(R.id.backs).setOnClickListener(this);

}

@Override
public int bindLayout() {
    return R.layout.activity_two;
}

}

TwoActivity 的布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/backs"
        android:layout_marginLeft="10dp"
        android:src="@drawable/fanhui"/>
    <View
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"/>
    <Button
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/finish"
        android:layout_marginLeft="10dp"
        android:text="完成"
        android:background="#FF903A"/>
</LinearLayout>
<TextView
    android:background="#0f0"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:padding="5dp"
    android:text="切换的栏目"
    android:textSize="23sp" />
<GridView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:id="@+id/G1"
    android:layout_weight="1"
    android:numColumns="4"
    android:scrollbars="none"
    android:horizontalSpacing="5dp"/>
<TextView
    android:background="#0f0"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:padding="5dp"
    android:text="更多栏目"
    android:textSize="20sp" />
<GridView
    android:layout_width="match_parent"
    android:id="@+id/G2"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:horizontalSpacing="5dp"
    android:numColumns="4"
    android:padding="5dp"
    android:scrollbars="none"
    android:verticalSpacing="5dp"/>

TwoActivity 的适配器

public class GridAdapter extends BaseAdapter {

private ArrayList<String> list;
private Context context;
public GridAdapter(ArrayList<String> list, Context context) {
    this.list = list;
    this.context = context;
}

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

@Override
public Object getItem(int position) {
    return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = View.inflate(context, R.layout.item,null);
    TextView textView = convertView.findViewById(R.id.text1);
    textView.setText(list.get(position));
    return convertView;
}

}

在Tab01页面展示接口解析数据,添加数据库 有网展示数据 没网展示数据库

Tab01

public class Tab01 extends BaseFragment {

private MyListAdapter adapter;
private PullToRefreshListView pull;
private SQLiteDatabase db;
private ArrayList<One> ones;
@Override
protected int bindLayout() {
    return R.layout.tab01;
}

@Override
protected void bindEvent() {
    pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>(){

        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
            if (HttpUtils.isNetworkConnected(getActivity())){
                HttpUtils.httpAsTask("http://172.17.8.100/small/commodity/v1/commodityList",
                    new HttpUtils.CallBackA() {
                        @Override
                        public void getData(String s) {
                            ones = getArrayData(s);
                            //设置适配器
                            adapter = new MyListAdapter(getActivity(), ones);
                            pull.setAdapter(adapter);
                            pull.onRefreshComplete();
                        }
                    });
            }else{
                Toast.makeText(getActivity(), "没网", Toast.LENGTH_LONG).show();
            }
            pull.onRefreshComplete();
        }

        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
            if (HttpUtils.isNetworkConnected(getActivity())){
                HttpUtils.httpAsTask("http://172.17.8.100/small/commodity/v1/commodityList",
                        new HttpUtils.CallBackA() {
                            @Override
                            public void getData(String s) {
                                ArrayList<One> data = getArrayData(s);
                                ones.addAll(data);
                                adapter.notifyDataSetChanged();
                                pull.onRefreshComplete();
                            }
                        });
            }else{
                Toast.makeText(getActivity(), "没网", Toast.LENGTH_LONG).show();
            }
            pull.onRefreshComplete();
        }
    });
}

@Override
protected void initData() {
    if (HttpUtils.isNetworkConnected(getActivity())){
        //有网的时候加载数据
        HttpUtils.httpAsTask("http://172.17.8.100/small/commodity/v1/commodityList",
                new HttpUtils.CallBackA() {
                    @Override
                    public void getData(String s) {
                        ones = getArrayData(s);
                        //设置适配器
                        adapter = new MyListAdapter(getActivity(), ones);
                        pull.setAdapter(adapter);
                        //添加数据库
                        Cursor cursor = db.query("person", null, null, null, null, null, null);
                        if (!cursor.moveToFirst()){
                            ContentValues values = new ContentValues();
                            values.put("title",s);
                            db.insert("person",null,values);
                        }
                    }
                });
    }else{
        //没网络查询数据库
        Cursor cursor = db.query("person", null, null, null, null, null, null);
        if (cursor.moveToFirst()){
            String title = cursor.getString(cursor.getColumnIndex("title"));
            ones = getArrayData(title);
            //设置适配器
              adapter = new MyListAdapter(getActivity(),ones);
              pull.setAdapter(adapter);
        }
    }
}
@Override
protected void initView() {
    pull = bindView(R.id.pull);
    pull.setMode(PullToRefreshBase.Mode.BOTH);
    pull.setPullToRefreshOverScrollEnabled(true);
    //创建数据库对象
    SqlHelp help = new SqlHelp(getActivity());
    db = help.getReadableDatabase();
}

public ArrayList<One> getArrayData(String s) {
    Gson gson = new Gson();
    Four four = gson.fromJson(s, Four.class);
    Three result = four.getResult();
    Two mlss = result.getMlss();
    Two pzsh = result.getPzsh();
    Two rxxp = result.getRxxp();
    ArrayList<One> oneM = new ArrayList<>();
    oneM.addAll(mlss.getCommodityList());
    oneM.addAll(pzsh.getCommodityList());
    oneM.addAll(rxxp.getCommodityList());
    return oneM;
}

}

数据库类

public class SqlHelp extends SQLiteOpenHelper {

public SqlHelp(Context context) {
    super(context, "bw.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT ,title TEXT)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}

数据展示适配器类

public class MyListAdapter extends BaseAdapter {
private Context context;
private ArrayList list;

public MyListAdapter(Context context, ArrayList<One> list) {
    this.context = context;
    this.list = list;
}

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

@Override
public Object getItem(int position) {
    return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if (convertView==null){
        convertView = View.inflate(context, R.layout.list_item,null);
        holder = new ViewHolder();
        holder.imageView = convertView.findViewById(R.id.imageview);
        holder.textView = convertView.findViewById(R.id.text_name);
        holder.textView1 = convertView.findViewById(R.id.text_pric);
        convertView.setTag(holder);

    }else{
        holder = (ViewHolder) convertView.getTag();
    }
    One one = list.get(position);
    holder.textView.setText(one.getCommodityName());
    holder.textView1.setText(one.getPrice()+" ");
    Glide.with(context).load(one.getMasterPic()).into(holder.imageView);
    return convertView;
}
class ViewHolder {
    private ImageView imageView;
    private TextView textView;
    private TextView textView1;
}

}

效果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值