频道管理

本文介绍如何在Android项目中使用DragGrid库实现可拖动的网格布局,并结合TabLayout和ViewPager创建动态切换的界面。通过注册依赖、导入库、设置适配器和监听器,实现响应式的UI设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先在项目的build下注册

allprojects {
repositories {
jcenter()
//下面这句maver才是加上的,上面的自带 的
maven {url “https://jitpack.io”}
}
}

2、然后在app下的build中导入依赖

compile ‘com.github.andyoom:draggrid:v1.0.1’

3.MainActivity

public class MainActivity extends AppCompatActivity {

private ViewPager vp;
private Button btn;
ArrayList<Fragment> flist=new ArrayList<>();
ArrayList<ChannelBean> channelBeanslist=new ArrayList<>();
private MPagerAdapter padapter;
private TabLayout tb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    initData();
}
/*
初始化
 */
private void initView() {
    tb = findViewById(R.id.tb);
    vp = findViewById(R.id.vp);
    btn = findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

// ChannelActivity 跳转 ChannelActivity提供的打卡自己的方法;
ChannelActivity.startChannelActivity(MainActivity.this,channelBeanslist);
}
});
}

private void initData() {
    channelBeanslist.add(new ChannelBean("热点",true));
    channelBeanslist.add(new ChannelBean("北京",true));
    channelBeanslist.add(new ChannelBean("房价",true));
    channelBeanslist.add(new ChannelBean("旅游",false));
    channelBeanslist.add(new ChannelBean("条目1",false));
    channelBeanslist.add(new ChannelBean("条目2",false));

    for (int i = 0; i < channelBeanslist.size(); i++) {
        if(channelBeanslist.get(i).isSelect()){//为true添加进去
            String tabname = channelBeanslist.get(i).getName();
            tb.addTab(tb.newTab().setText(tabname));
            flist.add(new MFragment());
        }

    }


    padapter = new MPagerAdapter(getSupportFragmentManager());
    vp.setAdapter(padapter);
    tb.setupWithViewPager(vp);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //ChannelActivity回调 钥匙 key
    String json = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);

    Type type = new TypeToken<ArrayList<ChannelBean>>(){}.getType();
    Gson gson = new Gson();
    channelBeanslist= gson.fromJson(json, type);
    //删除之前的tb
    tb.removeAllTabs();
    //删除之前的fragment
    flist.clear();
    //然后重新添加
    for (int i = 0; i < channelBeanslist.size(); i++) {
        if (channelBeanslist.get(i).isSelect()){
            String tabname = channelBeanslist.get(i).getName();
            tb.addTab(tb.newTab().setText(tabname));
            flist.add(new MFragment());
        }

    }
    //刷新 因为集合里的fragment数量改变了
    padapter.notifyDataSetChanged();
}

class MPagerAdapter extends FragmentPagerAdapter {
    public MPagerAdapter(FragmentManager fm) {
        super(fm);
    }

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

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

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        //todo viewpager返回的标题
        return channelBeanslist.get(position).getName();
    }
}

}

4.MFragment

public class MFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView=new TextView(getActivity());
double random = Math.random();
textView.setText(“111111”+random);
return textView;
}
}

5.布局文件

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

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <android.support.design.widget.TabLayout
        android:id="@+id/tb"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

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

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="+"/>
</LinearLayout>
<android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"></android.support.v4.view.ViewPager>
内容概要:本文介绍了奕斯伟科技集团基于RISC-V架构开发的EAM2011芯片及其应用研究。EAM2011是一款高性能实时控制芯片,支持160MHz主频和AI算法,符合汽车电子AEC-Q100 Grade 2和ASIL-B安全标准。文章详细描述了芯片的关键特性、配套软件开发套件(SDK)和集成开发环境(IDE),以及基于该芯片的ESWINEBP3901开发板的硬件资源和接口配置。文中提供了详细的代码示例,涵盖时钟配置、GPIO控制、ADC采样、CAN通信、PWM输出及RTOS任务创建等功能实现。此外,还介绍了硬件申领流程、技术资料获取渠道及开发建议,帮助开发者高效启动基于EAM2011芯片的开发工作。 适合人群:具备嵌入式系统开发经验的研发人员,特别是对RISC-V架构感兴趣的工程师和技术爱好者。 使用场景及目标:①了解EAM2011芯片的特性和应用场景,如智能汽车、智能家居和工业控制;②掌握基于EAM2011芯片的开发板和芯片的硬件资源和接口配置;③学习如何实现基本的外设驱动,如GPIO、ADC、CAN、PWM等;④通过RTOS任务创建示例,理解多任务处理和实时系统的实现。 其他说明:开发者可以根据实际需求扩展这些基础功能。建议优先掌握《EAM2011参考手册》中的关键外设寄存器配置方法,这对底层驱动开发至关重要。同时,注意硬件申领的时效性和替代方案,确保开发工作的顺利进行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值