Fragment中的列表视图未填充

时间:2016-09-05 10:57:45

标签: android listview android-fragments

我正在尝试填充ListView并将其显示在Fragment下。我看到在调用适配器后计数正确返回(大于0)。最初我遇到了getView未被调用的问题,但是通过将layout_height更改为wrap_content,正如本文其中一篇所建议的那样。我看到现在在将一个片段滑动到另一个片段时调用getView。但是,最初加载Fragment时,getView不会被调用。无论采取任何行动,屏幕上都会显示ListView

First Fragment:

public class OneFragment extends Fragment {

public OneFragment() {
    // Required empty public constructor
}

//private ListView mListView;
GridView grid;
String[] web = {
        "Doctors","Movies","Dentists"} ;

int[] imageId = {
        R.mipmap.doctors,
        R.mipmap.dentists,
        R.mipmap.restaurants
            };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_one, container, false);
    int iconSize=getResources().getDimensionPixelSize(android.R.dimen.app_icon_size);

    CustomGrid adapter = new CustomGrid(view.getContext(), iconSize);
    GridView gridview = (GridView) view.findViewById(R.id.grid);
    gridview.setAdapter(adapter);

    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            Toast.makeText(view.getContext(), "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();

            ListItemMainFragment nextFrag = new ListItemMainFragment();

            FragmentTransaction ft = getFragmentManager().beginTransaction();

            ft.replace(((ViewGroup) getView().getParent()).getId(), nextFrag);
            ft.setTransition(FragmentTransaction.TRANSIT_NONE);// it will anim while calling fragment.
            ft.addToBackStack(null); // it will manage back stack of fragments.
            ft.commit();


        }
    });

    return view;
 }
}

下一篇片段:

    public class ListItemMainFragment extends Fragment implements Item.DataListener {

    private ListView mListView;
    private ItemAdapter adapter;

    public ListItemMainFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       View view = inflater.inflate(R.layout.list_item_main, container, false);
        mListView = (ListView) view.findViewById(R.id.item_list_view);
        mListView.setAdapter(adapter);

        //final String DBReference = "all/" + position + "/" + web[+position];
        final String DBReference = "all/0/Doctors";
        Item.getRecipesFromDB(ListItemMainFragment.this, DBReference);
        return view;
    }

    @Override
    public void newDataReceived(ArrayList<Item> itemList) {

        adapter = new ItemAdapter(getActivity(), itemList);
        mListView.setAdapter(adapter);

        Log.d("records ", String.valueOf((adapter.getCount())));

     }
   }

适配器:

  public class ItemAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mInflater;
    private ArrayList<Item> mDataSource;

    public ItemAdapter(Context context, ArrayList<Item> items) {
        Log.d("MyApp", "I am here1000A");
        mContext = context;
        mDataSource = items;
        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    //1
    @Override
    public int getCount() {
        return mDataSource.size();
    }

    //2
    @Override
    public Object getItem(int position) {
        return mDataSource.get(position);
    }

    //3
    @Override
    public long getItemId(int position) {

        return position;
    }

    //4
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get view for row item
        View rowView = mInflater.inflate(R.layout.list_item_detail, parent, false);
        Log.d("MyApp", "I am here1000");

        TextView titlePrefixTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_title_prefix);
        TextView titleTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_title);
        TextView specialityTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_speciality);
        TextView addressTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_address);
        TextView distanceTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_distance);
        TextView timingsTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_timings);
        TextView contactTextView =
                (TextView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_contact);


    // Get thumbnail element
        //ImageView thumbnailImageView =
          //      (ImageView) rowView.findViewById(com.ferainc.kudla.R.id.item_list_thumbnail);

        Item item = (Item) getItem(position);
        titlePrefixTextView.setText(String.valueOf(position+1) + ".");
        titleTextView.setText(item.title);
        specialityTextView.setText(item.speciality);
        addressTextView.setText(item.address);
        distanceTextView.setText(item.distance);
        timingsTextView.setText(item.timings);
        contactTextView.setText(item.contact);

        return rowView;
     }
   }

Item.java:

public class Item {

public String title;
public String speciality;
public String timings;
public String address;
public String contact;
public String distance;

public interface DataListener {
    void newDataReceived(ArrayList<Item> itemList);
}

public Item () {
    // empty default constructor, necessary for Firebase to be able to deserialize blog posts
}
public String getTitle() {
    return title;
}
public String getSpeciality() { return speciality; }
public String getTimings() {
    return timings;
}
public String getAddress() { return address; }
public String getContact() { return contact; }
public String getDistance() { return distance; }

public static void getRecipesFromDB(final DataListener dataListener, String DBReference){
    final ArrayList<Item> itemList = new ArrayList<>();
    final DatabaseReference mDatabase;
    final Item item = new Item();

    mDatabase = FirebaseDatabase.getInstance().getReference(DBReference);

    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            System.out.println("There are " + snapshot.getChildrenCount() + " recipes");
            Log.d("MyApp", "I am here100");

            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                Item post = postSnapshot.getValue(Item.class);

                Item item = new Item();

                item.title = post.getTitle();
                item.speciality = post.getSpeciality();
                item.timings = post.getTimings();
                item.address = post.getAddress();
                item.contact = post.getContact();
                item.distance = post.getDistance();

                itemList.add(item);
            }
            // Transaction complete, sending to listener
            dataListener.newDataReceived(itemList);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getMessage());
        }

    });

 }

}

的ListView:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.ferainc.kudla.ListItemMainFragment">

<ListView
    android:id="@+id/item_list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</ListView>


</RelativeLayout>

ListView项目详情:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:background="@android:color/holo_green_light"
card_view:cardCornerRadius="4dp">

    <RelativeLayout
    android:id="@+id/list_layout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
        android:background="@android:color/holo_green_light">

        <TextView
        android:id="@+id/item_list_title_prefix"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:textSize="18sp"
        android:textColor="@android:color/holo_red_light"
        tools:text="Title" />

        <TextView
        android:id="@+id/item_list_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:layout_toEndOf="@id/item_list_title_prefix"
        android:textSize="18sp"
        android:textColor="@android:color/holo_red_light"
        tools:text="Title" />

        <TextView
        android:id="@+id/item_list_speciality"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item_list_title"
        android:layout_marginTop="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:textColor="#000000" />

        <View
            android:id="@+id/center_divider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_below="@+id/item_list_speciality"
            android:background="@android:color/darker_gray" />

        <TextView
            android:id="@+id/item_list_contact_prefix"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/center_divider"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="4dp"
            android:text="Ph:"
            android:textColor="#fff092b0" />

        <TextView
            android:id="@+id/item_list_contact"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/center_divider"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="4dp"
            android:layout_toEndOf="@id/item_list_contact_prefix"
            android:textColor="#fff092b0" />

        <TextView
            android:id="@+id/item_list_address_prefix"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/item_list_contact"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="4dp"
            android:text="Address:"
            android:textColor="#fff092b0" />

        <TextView
        android:id="@+id/item_list_address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            android:layout_below="@+id/item_list_contact"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="4dp"
            android:layout_toEndOf="@id/item_list_address_prefix"
        android:textColor="#fff092b0" />

        <TextView
            android:id="@+id/item_list_distance_prefix"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/item_list_address"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="4dp"
            android:text="Distance:"
            android:textColor="#fff092b0" />

        <TextView
        android:id="@+id/item_list_distance"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item_list_address"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="4dp"
            android:layout_toEndOf="@id/item_list_distance_prefix"
        android:textColor="#fff092b0" />

        <TextView
            android:id="@+id/item_list_timings_prefix"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/item_list_distance"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="4dp"
            android:text="Timings:"
            android:textColor="#fff092b0" />

        <TextView
        android:id="@+id/item_list_timings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item_list_distance"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="4dp"
            android:layout_toEndOf="@id/item_list_timings_prefix"
        android:textColor="#fff092b0" />

    </RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

我不确定Item.getRecipesFromDB(ListItemMainFragment.this, DBReference);的所需内容 因为没有关于“项目”的代码,所以你的片段 但它认为它不会填充你的ListView 因此,在ListView初始化之后,您必须创建一个适配器(它在onCreateView中丢失)。然后将其设置为ListView 您也可以尝试从onCreteView调用newDataReceived() 但我建议你在onCreteView中创建适配器然后在newDataReceived()中你可以更新数据并调用notifyDataSetChanged()而不是每次都创建新的