2015-05-08 3 views
1

У меня есть существующий фрагмент, в котором я хочу отображать типичную адресную информацию типа Street, City, PIN и список телефонных номеров.Android: отображение списка во фрагменте

Чтобы отобразить список телефонных номеров, я добавил ListView в addressfragment.xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="16dp" > 

     <TextView 
      android:id="@+id/txtStreetAddr" 
      style="?android:textAppearanceMedium" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:lineSpacingMultiplier="1.2" 
      android:text="default" /> 

     <ListView 
      android:id="@+id/phones" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="0dp" 
      android:paddingLeft="0dp" > 
     </ListView> 
     </LinearLayout> 
</ScrollView> 

Мой фрагмент Класс:

 public class AddressFragment extends Fragment { 
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 

ViewGroup rootView = (ViewGroup) inflater 
       .inflate(R.layout.fragment_screen_slide_page, container, false); 

       ((TextView) rootView.findViewById(R.id.txtStreetAddr)).setText(
         "123, Corner Street"); 

       ListView phoneListView = ((ListView) rootView.findViewById(R.id.phones)); 

       ArrayList<String> phNumbers = new ArrayList<String>(); 
       phNumbers.add("4343534343"); 
       phNumbers.add("6767566766"); 

       ArrayAdapter<String> arrayAdapter =  
       new ArrayAdapter<String>(MyApp.getAppContext(),android.R.layout.simple_list_item_1, phNumbers); 
       // Set The Adapter 
       phoneListView.setAdapter(arrayAdapter); 
    return rootView; 
     } 

Списочное телефон просто не отображается на экране - Зачем? Есть ли лучший способ справиться с этим?

+0

Опубликовать ur макет xml полностью – Chandrakanth

+0

и опубликовать также полный onCreateView. Опубликуйте также полный макет – Blackbelt

ответ

3

Я думаю, что вы забыли надуть View в onCreateView(...)

View rootView= inflater.inflate(R.layout.your_layout, container, false); 

добавить свой onCreateView(...) должен быть

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView= inflater.inflate(R.layout.your_layout, container, false); 

     ((TextView) rootView.findViewById(R.id.txtStreetAddr)).setText(
       "123, Corner Street"); 

     ListView phoneListView =((ListView) rootView.findViewById(R.id.phones); 

     ArrayList<String> phNumbers = new ArrayList<String>(); 
     phNumbers.add("4343534343"); 
     phNumbers.add("6767566766"); 

     ArrayAdapter<String> arrayAdapter =  
     new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, phNumbers); 
     // Set The Adapter 
     phoneListView.setAdapter(arrayAdapter); 

    return rootView; 
    } 
+1

, который мог бы объяснить потерю времени выполнения или ошибку времени компиляции, а не * список не отображается * ошибка, – Blackbelt

+1

Простите, это был неполный код ... надуватель действительно там (код обновлен в вопросе), так как правильный адрес i – Jasper

+0

@ Jasper Затем сначала отправьте свой код правильно. –

1

Удалить ScrollView и сделать LinearLayout в качестве родительского компоновщика.

+0

Спасибо Чандракант ..., который заботится о проблеме с одной записью. Если вы знаете какие-либо адресные виджеты или лучший способ справиться с этим, отправляйте сообщения ...! – Jasper

0

если вы Scrollview в качестве родительского вида то, вы, чтобы установить высоту ListView программно, вы можете создать метод, как показано ниже ---

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 

     return; 
    } 

    int totalHeight = 0; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight 
      + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 

} 

затем передать ListView этому методу, как показано ниже - -

phoneListView.setAdapter(arrayAdapter); 

setListViewHeightBasedOnChildren(phoneListView); 

Надеюсь, что это сработает отлично.

Смежные вопросы