适配器使用

模型与视图的绑定,通过适配器来完成

普通用法: 

继承RecyclerView.Adapter方式

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.soft_test_helper.R;
import com.example.soft_test_helper.pojo.Announcement;

import java.util.List;

public class AnnouncementAdapter extends RecyclerView.Adapter<AnnouncementAdapter.ViewHolder> {
    private List<Announcement> announcementList;

    public  AnnouncementAdapter (List <Announcement> announcementList){
        this.announcementList = announcementList;
    }
    /**
     * Called when RecyclerView needs a new {@link ViewHolder} of the given type to represent
     * an item.
     * <p>
     * This new ViewHolder should be constructed with a new View that can represent the items
     * of the given type. You can either create a new View manually or inflate it from an XML
     * layout file.
     * <p>
     * The new ViewHolder will be used to display items of the adapter using
     * {@link #onBindViewHolder(ViewHolder, int, List)}. Since it will be re-used to display
     * different items in the data set, it is a good idea to cache references to sub views of
     * the View to avoid unnecessary {@link View#findViewById(int)} calls.
     *
     * @param parent   The ViewGroup into which the new View will be added after it is bound to
     *                 an adapter position.
     * @param viewType The view type of the new View.
     * @return A new ViewHolder that holds a View of the given view type.
     * @see #getItemViewType(int)
     * @see #onBindViewHolder(ViewHolder, int)
     */
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.announcement_item,parent,false);
        return new ViewHolder(view);
    }

    /**
     * Called by RecyclerView to display the data at the specified position. This method should
     * update the contents of the {@link ViewHolder#itemView} to reflect the item at the given
     * position.
     * <p>
     * Note that unlike {@link ListView}, RecyclerView will not call this method
     * again if the position of the item changes in the data set unless the item itself is
     * invalidated or the new position cannot be determined. For this reason, you should only
     * use the <code>position</code> parameter while acquiring the related data item inside
     * this method and should not keep a copy of it. If you need the position of an item later
     * on (e.g. in a click listener), use {@link ViewHolder#getAdapterPosition()} which will
     * have the updated adapter position.
     * <p>
     * Override {@link #onBindViewHolder(ViewHolder, int, List)} instead if Adapter can
     * handle efficient partial bind.
     *
     * @param holder   The ViewHolder which should be updated to represent the contents of the
     *                 item at the given position in the data set.
     * @param position The position of the item within the adapter's data set.
     */
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Announcement announcement = announcementList.get(position);
        holder.titleTV.setText(announcement.getTitle());
        holder.contentTV.setText(announcement.getContent());
        holder.releaseTimeTV.setText(announcement.getReleaseTime());
    }

    /**
     * Returns the total number of items in the data set held by the adapter.
     *
     * @return The total number of items in this adapter.
     */
    @Override
    public int getItemCount() {
        return announcementList.size();
    }

    //静态内部类, 每个条目对应的布局
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView titleTV,contentTV,releaseTimeTV;
        public ViewHolder (View view)
        {
            super(view);
            titleTV = (TextView) view.findViewById(R.id.titleTV);
            contentTV = (TextView) view.findViewById(R.id.contentTV);
            releaseTimeTV = (TextView) view.findViewById(R.id.releaseTimeTV);
        }
    }
}

进阶版:

继承BaseQuickAdapter的方式

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.example.soft_test_helper.R;
import com.example.soft_test_helper.pojo.Announcement;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class AnnouncementAdapter02 extends BaseQuickAdapter<Announcement, BaseViewHolder> {

    public AnnouncementAdapter02(@Nullable List<Announcement> data) {
        super(R.layout.announcement_item, data);
    }

    @Override
    protected void convert(@NotNull BaseViewHolder baseViewHolder, Announcement announcement) {
        baseViewHolder.setText(R.id.titleTV,announcement.getTitle());
        baseViewHolder.setText(R.id.contentTV,announcement.getContent());
        baseViewHolder.setText(R.id.releaseTimeTV,announcement.getReleaseTime());
    }
}
RecyclerView设置适配器
private RecyclerView recycleView;
recycleView = findViewById(R.id.recycleView);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(AnnouncementActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recycleView.setLayoutManager(linearLayoutManager);
AnnouncementAdapter02 adapter = new AnnouncementAdapter02(announcementList);
recycleView.setAdapter(adapter);
adapter.setOnItemClickListener(AnnouncementActivity.this);

fragmentPagerAdapter使用

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;

public class PagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;      //需要显示的fragment

    public PagerAdapter(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
        super(fm);
        fragments = fragmentList;
    }

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

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

    @Override
    public long getItemId(int position) {   //原本返回的是位置,导致数据item删除后,不是当前的item,无法正确移除
        return fragments.get(position).hashCode();
    }
}
ViewPager设置适配器
private ViewPager pager;
pager = findViewById(R.id.pager);PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager(),fragments);
pager.setAdapter(pagerAdapter);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值