2015-04-02 3 views
0

Когда я вызываю ListViewAdpater через MainActivity, он отлично работает. Но если я создаю ListViewFragment, он не будет вызван. Я добавил ListViewFragment listViewFragment = new ListViewFragment(); в MainActivity. У меня есть ListViewAdapter, какАдаптер ListView не получает вызов через фрагмент

public class ListViewAdapter extends ArrayAdapter<String> { 
    public ListViewAdapter(Context context, String[] sensorArray) { 
     super(context, R.layout.listview_adapter, sensorArray); 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater layoutInflater = LayoutInflater.from(getContext()); 
     View view = layoutInflater.inflate(R.layout.listview_adapter, parent, false); 
     ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
     TextView textView = (TextView) view.findViewById(R.id.textView); 
     imageView.setImageResource(R.drawable.image); 
     textView.setText(getItem(position)); 
     return view; 
    } 
} 

Но когда я звоню через фрагмент, как показано ниже, я не вижу ListView

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

     View view = inflater.inflate(R.layout.activity_main, container, false); 

     String[] sensorArray = getResources().getStringArray(R.array.sensor_array); 

     ListView listView = (ListView) view.findViewById(R.id.listView); 
     listView.setAdapter(new ListViewAdapter(getActivity(),sensorArray)); 
     return view; 
    } 
} 

При запуске отладчика он вызывает ListViewFragment, но он не идет в методе OnCreate

Я изменил XML-файлы, как показано ниже так в activity_main.xml я добавил `

<fragment android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/fragment" 
    android:name="com.app.fragment.ListViewFragment" 
    tools:layout="@layout/listviewfragment"/> 

and created listviewfragment.xml as '

<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    /> 

это право?

+0

Вы можете прикрепить код, в котором вы добавляете ListViewFragment к деятельности? – Naveed

+0

Я добавил эту строку в MainActivity 'ListViewFragment listViewFragment = new ListViewFragment();' Это не сработает? – user2661518

+0

Нет. Я добавлю ответ – Naveed

ответ

1

Фрагменты должны быть прикреплены к действию, чтобы функционировать. Вам нужно добавить фрагмент в действие, используя либо xml (статически), либо используя диспетчер фрагментов (динамически).

Статический вы можете просто добавить фрагмент, поместив это в файле макет вашей деятельности в:

<fragment android:name="com.example.android.fragments.MyFragment" 
       android:id="@+id/my_fragment" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

android:name должен указать ваш класс фрагмента.

Использование менеджера фрагмента можно добавить фрагмент следующим образом: В OnCreate вашей деятельности (в) просто использовать это:

ListViewFragment listViewFragment = new ListViewFragment(); 
    getFragmentManager().beginTransaction().add(R.id.container_view, listViewFragment).commit(); 

См FragmentManager и FragmentTransaction для более подробной информации. Вы можете использовать метод replace также с видом контейнера, который, как следует из названия, заменит фрагмент.

+0

поэтому в activity_main.xml я добавил ' <фрагмент андроида: layout_width =" wrap_content" андроид: layout_height = "wrap_content" андроид: идентификатор = "@ + идентификатор/фрагмент» андроид: имя = "com.app.fragment.ListViewFragment" инструменты: макет = "@ макет/listviewfragment"/> ' – user2661518

+0

См комментарий выше – Naveed

1

Вам необходимо использовать FragmentTransaction и должен иметь элемент FrameLayout в вашем основном макете деятельности.

activity_main.xml:

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

MainActivity:

FragmentTransaction ft = fm.beginTransaction(); 
ft.add(R.id.fragment_container,new ListViewFragment(), "sensorArray"); 
ft.commit(); 
+0

Я редактировал вопрос с XML-файлами бит Я получаю исключение inflateException. Нужно ли добавлять идентификатор для ListView? – user2661518

+0

Попробуйте 'View view = inflater.inflate (R.layout. Listviewfragment, container, false);' – itechevo