无题

本文介绍了一个使用Fragment实现的卡片式界面案例,重点讲解了如何在Fragment中加载和展示数据,以及如何在用户滑动接近底部时加载更多数据。通过自定义CardSlidePanel组件,实现了卡片切换时的监听事件,并在Fragment中实现了数据的动态加载。

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

Fragment

public class FridendsFirstPageFragment extends Fragment
{
    private CardSlidePanel.CardSwitchListener cardSwitchListener;
    int currentPage = 1;

    private List<CardDataItem> dataList = new ArrayList<CardDataItem>();
    private List<CardDataItem> dataList1 = new ArrayList<CardDataItem>();
    ArrayList<JobBean> lists = new ArrayList<JobBean>();
    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        view = inflater.inflate(R.layout.card_layout, null);
        initImageLoader();
        initView(view);
        getData(currentPage);
        return view;
    }

   CardSlidePanel slidePanel;
    private void initView(View rootView)
    {
        slidePanel = (CardSlidePanel) rootView.findViewById(R.id.image_slide_panel);
        cardSwitchListener = new CardSlidePanel.CardSwitchListener()
        {

            @Override
            public void onShow(int index)
            {
                Log.d("CardFragment", "正在显示-" + dataList.get(index).userName);
            }

            @Override
            public void onCardVanish(int index, int type)
            {
                Log.d("CardFragment", "正在消失-" + dataList.get(index).userName + " 消失type=" + type);
            }

            @Override
            public void onItemClick(View cardView, int index)
            {
                Log.d("CardFragment", "卡片点击-" + dataList.get(index).userName);
                UIUtils.showToastSafe(dataList.get(index).userName);
            }
        };
        slidePanel.setCardSwitchListener(cardSwitchListener);

    }

    private void prepareDataList()
    {
        for (int i = 0; i < lists.size(); i++)
        {
            CardDataItem dataItem = new CardDataItem();
            dataItem.userName = lists.get(i).jobName;
            dataItem.imagePath = lists.get(i).companyLogo;
            dataItem.likeNum = (int) (Math.random() * 10);
            dataItem.imageNum = (int) (Math.random() * 6);
            dataList.add(dataItem);
        }
    }
    public void appendData(final int currentPage,final CardSlidePanel panel)
    {
        String url = ConstantUrl.SEARCH_JOB + "?publishAreaId=" + "149" + "&page=" + currentPage;


        RequestNet.requestUrl(url, new StringCallback()
        {
            @Override
            public void onError(Call call, Exception e)
            {

                UIUtils.showToastSafe("连接失败!");
            }

            @Override
            public void onResponse(String s)
            {
                JSONObject json = null;
                try
                {
                    json = new JSONObject(s);
                    String jobList = json.getString("jobList");
                    lists = gson.fromJson(jobList, new TypeToken<List<JobBean>>()
                    {
                    }.getType());

                    for (int i = 0; i < lists.size(); i++)
                    {
                        CardDataItem dataItem = new CardDataItem();
                        dataItem.userName = lists.get(i).jobName;
                        dataItem.imagePath = lists.get(i).companyLogo;
                        dataItem.likeNum = (int) (Math.random() * 10);
                        dataItem.imageNum = (int) (Math.random() * 6);
                        dataList1.add(dataItem);
                    }
                    panel.appendData(dataList1);

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

            }
        });
    }
}

CardSlidePanel extends ViewGroup

public class CardSlidePanel extends ViewGroup {
 public CardSlidePanel(Context context) {
        this(context, null);
    }

    public CardSlidePanel(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

 /** 
     * 如果有新的数据到达,则需要填充新数据
     * 该接口未测试,有需要的同学请自行脑补
     *
     * @param appendList 新数据列表
     */
    public void appendData(List<CardDataItem> appendList) {
        dataList.addAll(appendList);

        int currentIndex = isShowing;
        int num = viewList.size();
        for (int i = 0; i < num; i++) {
            CardItemView itemView = viewList.get(i);
            itemView.setVisibility(View.VISIBLE);
            itemView.fillData(dataList.get(currentIndex++));
        }
    }

   // 3. changedView填充新数据
            int newIndex = isShowing + 4;
            if (newIndex < dataList.size()) {
                CardDataItem dataItem = dataList.get(newIndex);
                changedView.fillData(dataItem);
            } else {
            //如果没有数据,则在此处填充数据
                changedView.setVisibility(View.INVISIBLE);
                page++;
                FridendsFirstPageFragment fra=new FridendsFirstPageFragment();
                fra.appendData(page,this);
            }

}

进入Fragment,请求数据(10条),展示数据,当用户滑动到第7张,需要到fragment中请求下一页的数据,需要向fragment中的方法传实体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值