簡體   English   中英

RecyclerView 未加載數據的原因

[英]Reason of RecyclerView Not Loading Data

我嘗試在 Android 中使用RecyclerView創建一個列表 但是,我不明白為什么 RecyclerView無法正確加載數據 我試圖將我的代碼與在線提供的示例進行比較,但我無法分辨示例代碼和我的代碼之間有什么區別。

任何人都可以幫助指出我的代碼缺少什么或有什么問題嗎?

活動_main.xml

<?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"
    tools:context="daozui.assignment3_task3.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/RecyclerView"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>    
</LinearLayout>

contact_arrangement.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/contactIcon_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/man"
        android:layout_margin="10dp"/>

    <TextView
        android:id="@+id/contactName_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="30sp"
        android:text="Name"
        android:layout_toEndOf="@id/contactIcon_ID"
        android:layout_marginTop="25dp"
        android:layout_marginStart="25dp"/>

    <TextView
        android:id="@+id/contactRelationship_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFBEB9B9"
        android:textSize="20sp"
        android:text="Relationship"
        android:layout_alignStart="@id/contactName_ID"
        android:layout_below="@id/contactName_ID"/>

</RelativeLayout>

主Activity.Java

package daozui.assignment3_task3;

import android.app.ListFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    RecyclerView theRecyclerView;
    List<Contact> contactList;
    ContactAdapter theAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createList();

        theRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView);
        theRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        theAdapter = new ContactAdapter(contactList);
        theRecyclerView.setAdapter(theAdapter);
    }

    private void createList() {
        contactList = new ArrayList<Contact>();
        contactList.add(new Contact("Alex", "male", "Friends", "0123456789"));
        contactList.add(new Contact("Mona", "female", "Friends", "9876543210"));
    }
}

聯系人適配器

package daozui.assignment3_task3;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;

public class ContactAdapter extends RecyclerView.Adapter<ContactAdapter.theViewHolder> {
    private List<Contact> contacList;

    public ContactAdapter(List<Contact> ContactList) {
        this.contacList = ContactList;
    }

    @Override
    public ContactAdapter.theViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.contact_arrangement, parent, false);
        return new theViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(theViewHolder holder, int position) {
        Contact contact = contacList.get(position);
        holder.contactName.setText(contact.getName());
        holder.contactRelationship.setText(contact.getRelationship());

        if (contact.getGender().equals("male")) {
            holder.contactIcon.setImageResource(R.drawable.man);
        } else {
            holder.contactIcon.setImageResource(R.drawable.woman);
        }
    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public static class theViewHolder extends RecyclerView.ViewHolder {

        public TextView contactName, contactRelationship;
        public ImageView contactIcon;

        public theViewHolder(View itemView) {
            super(itemView);
            contactIcon = (ImageView) itemView.findViewById(R.id.contactIcon_ID);
            contactName = (TextView) itemView.findViewById(R.id.contactName_ID);
            contactRelationship = (TextView) itemView.findViewById(R.id.contactRelationship_ID);
            //            itemView.setOnClickListener(this);

        }

        //        @Override
        //        public void onClick(View view)
        //        {
        //            int pos= getAdapterPosition();
        //            Toast.makeText(itemView.getContext(),contacList.get(pos).getContactNumber(),Toast.LENGTH_LONG);
        //        }
    }
}

聯系.Java

package daozui.assignment3_task3;

public class Contact {
    private String name;
    private String gender;
    private String relationship;
    private String contactNumber;

    public Contact(String Name, String Gender, String Relationship, String ContactNumber) {
        this.name = Name;
        this.gender = Gender;
        this.relationship = Relationship;
        this.contactNumber = ContactNumber;
    }

    public String getName() {
        return name;
    }

    public String getGender() {
        return gender;
    }

    public String getRelationship() {
        return relationship;
    }

    public String getContactNumber() {
        return contactNumber;
    }
}

問題在這里:

  @Override
public int getItemCount() {
    return 0;
}

您應該返回列表的大小:

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

您應該在此處返回集合的大小:

@Override
public void getItemCount(){
  return contactList.size();
}

getItemCount()返回適配器持有的數據集中的項目總數。

getItemCount()返回的int值是RecyclerView將要從集合中查找要綁定的數據的次數。

通知您的適配器數據已更新。

notifyDataSetChanged();



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

在列表為空的情況下,使用這個簡單的三元來避免空指針異常;

@Override
    public int getItemCount() {
        return contactList == null ? 0 : contactList.size();
    }

暫無
暫無

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

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