簡體   English   中英

Android:在回收站視圖中設置文本

[英]Android : Setting text in recycler view

我正在使用一個Android應用程序,在其中以Grid樣式顯示數據。 我又添加了一個TextView,我想在其中顯示從服務器獲取的一些數據。 不幸的是,我不知道該怎么做。 目前,我已將數據放入一個類的一個變量(LineItem)中,以網格方式添加其內容。 我希望有人可以幫助我解決這個問題。

SectionAdapters.java:

public class SectionAdapters extends RecyclerView.Adapter<SectionViewHolder> {


    private NoteServiceImpl noteService = new NoteServiceImpl();

    private static final int LINEAR = 0;

    private final Context mContext;

    private SectionServiceImpl sectionService = new SectionServiceImpl();

    List<RestSection> restSectionList = new ArrayList<>();

    private int mHeaderDisplay;

    private final ArrayList<LineItem> mItems;

    public SectionAdapters(Context context, int headermode) {
        mContext = context;

        String lastHeader = "";

        int sectionManager = -1;
        int headerCount = -1;
        int sectionFirstPosition = 0;

        mItems = new ArrayList<>();

        restSectionList = this.sectionService.getSectionByCanvas(2500);

// As you can see in the below for loop, I am getting the setting value for LineItems last parameter, and adding it in mItems. But I don't know how to set it. 
        for (int i = 0; i < restSectionList.size(); i++) {
            String header = restSectionList.get(i).getMsectionname();
            RestNote restNote = this.noteService.getFirstNoteForSection(restSectionList.get(i).getMsectionid());
            mItems.add(new LineItem(header, true, sectionManager, sectionFirstPosition, restNote.getMnotetext()));

        }
    }

    public String itemToString(int position) {
        return mItems.get(position).text;
    }

    private void notifyHeaderChanges() {
        for (int i = 0; i < mItems.size(); i++) {
            LineItem lineItem = mItems.get(i);
            if (lineItem.isHeader) {
                notifyItemChanged(i);
            }
        }
    }

    @Override
    public SectionViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view;
// IN the below layout, i.e activity_group_section, there is a textview to be populated
        view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_group_section, parent, false);
        return new SectionViewHolder(view);
    }

    @Override
    public void onBindViewHolder(SectionViewHolder holder, int position) {
        final LineItem item = mItems.get(position);
        final View itemView = holder.itemView;
// The first text is set below. 
        holder.bindText(item.text);
        final GridSLM.LayoutParams lp = GridSLM.LayoutParams.from(itemView.getLayoutParams());

        lp.setSlm(item.sectionManager == LINEAR ? LinearSLM.ID : GridSLM.ID);
        lp.setColumnWidth(mContext.getResources().getDimensionPixelSize(R.dimen.grid_column_width));
        lp.setFirstPosition(item.sectionFirstPosition);
        itemView.setLayoutParams(lp);
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }

   private static class LineItem {

        public int sectionManager;

        public int sectionFirstPosition;

        public boolean isHeader;

        public String text;

// The below line which I have added is something I would like to display in grid. 
        public String otherText;

        public LineItem(String text, boolean isHeader, int sectionManager,
                        int sectionFirstPosition, String otherText) {
            this.isHeader = isHeader;
            this.text = text;
            this.sectionManager = sectionManager;
            this.sectionFirstPosition = sectionFirstPosition;
            this.otherText = otherText;
        }
    }
}

activity_group_section:

  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dip" >

        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:orientation="vertical">
            <ImageView
                android:id="@+id/sectionimage"
                android:layout_width="140dp"
                android:layout_height="200dp"
                android:scaleType="fitXY"
                android:padding="5dp"
                android:src="@drawable/sectionbackground"
                />

            <TextView
                android:id="@+id/sectionname"
                android:layout_width="90dp"
                android:layout_height="match_parent"
                android:text="@string/textView"
                android:visibility="visible"
                android:gravity="center"
                android:layout_gravity="center_horizontal|top"
                android:maxLines="1"
                android:ellipsize="end"
                android:scrollHorizontally="true"
                android:layout_marginTop="20dp" />

// The guy below is where I want to set text
            <TextView
                android:layout_width="97dp"
                android:layout_height="160dp"

                android:id="@+id/noteText"
                android:layout_gravity="center_horizontal|bottom"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="10dp" />
        </FrameLayout>
    </RelativeLayout>

我希望我的問題很清楚。 請讓我知道是否需要任何解釋。 非常感謝。 :-)

編輯

SectionViewHolder:我添加了noteData變量以顯示noteData。

public class SectionViewHolder extends RecyclerView.ViewHolder {

    private TextView textView;
    private TextView noteData;
    private ImageView imageView;

    public SectionViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.sectionname);
        imageView = (ImageView) itemView.findViewById(R.id.sectionimage);
        noteData = (TextView) itemView.findViewById(R.id.noteText);
    }

    public void bindText(String text){
        textView.setText(text);
    }

    public void bindImage(Bitmap bitmap){
        imageView.setImageBitmap(bitmap);
    }

    public void bindNoteData(String data){
        noteData.setText(data);
    }


}

嘗試這樣的事情:

@Override
    public void onBindViewHolder(SectionViewHolder holder, int position) {
        final LineItem item = mItems.get(position);
        final View itemView = holder.itemView;
// The first text is set below. 
        holder.bindText(item.text);
        holder.bindNoteData(item.otherText);
        final GridSLM.LayoutParams lp = GridSLM.LayoutParams.from(itemView.getLayoutParams());

        lp.setSlm(item.sectionManager == LINEAR ? LinearSLM.ID : GridSLM.ID);
        lp.setColumnWidth(mContext.getResources().getDimensionPixelSize(R.dimen.grid_column_width));
        lp.setFirstPosition(item.sectionFirstPosition);
        itemView.setLayoutParams(lp);
    }

我添加了這一行:

holder.bindNoteData(item.otherText);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM