2016-09-05 8 views
0

ListViewを入力してフラグメントに表示しようとしています。私はカウントが正しく(0より大きい)アダプタを呼び出した後に戻ってきているのを見る。最初はgetViewが呼び出されていないという問題がありましたが、記事の1つで示唆されているように、layout_heightをwrap_contentに変更することによって解決されました。私はgetViewが今度はある断片を別の断片にスワイプしている間に呼び出されるのを見る。しかし、getViewは、フラグメントが最初にロードされたときに呼び出されることはありません。何もしなくても画面にはListViewが表示されません。フラグメント内のリストビューにデータが入力されていません

最初のフラグメント:

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()); 
     } 

    }); 

} 

} 

リストビュー:

<?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> 
+0

あなただけのデータを更新し、代わりに新しいものを作成するのでnotifyDataSetChanged()を呼び出すことができますたびに、あなたはonCreteViewにアダプタを作成することをお勧めしてからnewDataReceivedで()あなたがフラグメント –

+0

が表示されているにも活動のクラスを追加することができます* getRecipesFromDB *には何が含まれていますか? –

+0

私は最初のフラグメントとgetRecipesFromDBメソッドを含むクラスも追加しました。あなたは見てみることができます – dacscan3669

答えて

0

私は "アイテム"、それはあなたのフラグメントに関していかなるコードがないので、あなたがItem.getRecipesFromDB(ListItemMainFragment.this, DBReference);
で何を望むかを確認していません。
しかし、それはあなたのListViewを作成しないと思う。
ListViewの初期化後、アダプタを作成する必要があります(これはonCreateViewにはありません)。 ListViewに設定します。
また、onCreteViewからnewDataReceived()を呼び出すこともできます。
しかし、私は

+0

'Item.getRecipesFromDB(ListItemMainFragment.this、DBReference)'は、Firebaseデータベースからデータを取り出すために、フラグメントonCreateViewから呼び出されます。データはaddValueEventListenerメソッド内で構築されるため、itemListを直接返すことはできません。そのため、itemListはdataListenerを介して返されます。このdataListenerは、ListViewアダプタが設定されているFragmentクラスに実装されています。このコードは、私がアクティビティを扱っていたときにすべてうまく動作していましたが、最近、私はこの問題に気付き始めたときにFragmentとthatsの下にコードを移動しました。 – dacscan3669

関連する問題