Как правильно использовать библиотеку поддержки Android

Я работаю через Профессиональную разработку приложений Android 4. Глава 4 изменяет приложение «Список дел», чтобы использовать фрагменты, но я пытаюсь протестировать устройство Gingerbread. В книге можно использовать библиотеки поддержки, позволяющие использовать функции Android v3 или v4 на устройстве с более низкой версией, но это не очень хорошо описано.

Я столкнулся с проблемой:

// Get references to the Fragments android.app.FragmentManager fm = getFragmentManager(); ToDoListFragment todoListFragment = (ToDoListFragment) fm.findFragmentById( R.id.ToDoListFragment ); 

У меня этот импорт вверх: import android.support.v4.app.FragmentManager; Import android.support.v4.app.ListFragment;

Но lint предупреждает об ошибке «ToDoListFragment todoListFragment = (ToDoListFragment)»: нельзя отбрасывать из фрагмента в ToDoListFragment

В моем классе ToDoListFragment у меня есть:

  import android.support.v4.app.ListFragment; public class ToDoListFragment extends ListFragment { } 

Это почти дословно из книги, за исключением изменений в использовании библиотеки поддержки.

Я не понимаю, как правильно работать с этим кодом, используя библиотеку поддержки v4. Приносим извинения заранее, если этого недостаточно. Я все еще это изучаю, и я больше знаком с C / C ++, чем с Java. Если я не использую библиотеку поддержки, код строит просто отлично и будет работать на устройстве Ice Cream Sandwich, но я бы хотел, чтобы он работал на устройствах нижнего уровня.

Вы должны использовать getSupportFragmentManager() вместо getFragmentManager()

 android.support.v4.app.FragmentManager fm = getSupportFragmentManager() 

Я хотел сделать то же самое с этим примером. Есть несколько мест, где требуются изменения, чтобы заставить работать с библиотекой поддержки. Вот мой полный java-файл с изменениями, выделенными в комментариях:

 package com.paad.todolist; import java.util.ArrayList; import android.support.v4.app.FragmentActivity; // Because we're using the support library // version of fragments, the import has to be // FragmentActivity rather than Activity import android.support.v4.app.FragmentManager; // Support version of Fragment Manager import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; // because we're using the support library version of fragments, the class has to extend the // FragmentActivity superclass rather than the more usual Activity superclass public class ToDoListActivity extends FragmentActivity implements NewItemFragment.OnNewItemAddedListener { // logging tag private static final String TAG = "ToDoListActivity"; // create an array adaptor ready to bind the array to the list view private ArrayAdapter<String> aa; // set up array list to hold the ToDo items private ArrayList<String> todoItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "The onCreate method has started"); // inflate the view setContentView(R.layout.activity_to_do_list); // get references to the fragments // FragmentManager fm = getFragmentManager(); this won't work with the support library version FragmentManager fm = getSupportFragmentManager(); // this is the equivalent for support library ToDoListFragment todoListFragment = (ToDoListFragment)fm.findFragmentById(R.id.ToDoListFragment); // Create the array list of to do items todoItems = new ArrayList<String>(); // Create the array adapter to bind the array to the listview aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoItems); // bind the array adapter to the list view todoListFragment.setListAdapter(aa); } // implement the listener... It adds the received string to the array list // then notifies the array adapter of the dataset change public void onNewItemAdded(String newItem) { todoItems.add(newItem); aa.notifyDataSetChanged(); } }