8

私はプロフェッショナルな Android 4 アプリケーション開発に取り組んでいます。第 4 章では、フラグメントを使用するように To Do リスト アプリを変更しますが、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; android.support.v4.app.ListFragment をインポートします。

しかし、リントは「ToDoListFragment todoListFragment = (ToDoListFragment)」行で警告します: Fragment から ToDoListFragment にキャストできません

私の ToDoListFragment クラスには、次のものがあります。

    import android.support.v4.app.ListFragment;

    public class ToDoListFragment extends ListFragment {
    }

これは、サポート ライブラリを使用するように変更されたことを除いて、ほとんど本からそのままです。

v4 サポート ライブラリを使用してこのコードを正しく動作させる方法がよくわかりません。これが十分な情報でない場合は、事前にお詫び申し上げます。私はまだこれを学んでおり、Java よりも C/C++ に精通しています。サポート ライブラリを使用しない場合、コードは正常にビルドされ、Ice Cream Sandwich デバイスで実行されますが、下位レベルのデバイスでも動作するようにしたいと考えています。

4

2 に答える 2

13

getSupportFragmentManager()代わりに使用する必要がありますgetFragmentManager()

android.support.v4.app.FragmentManager fm = getSupportFragmentManager()
于 2012-11-06T19:43:32.383 に答える
2

この例でも同じことをしたかったのです。サポート ライブラリで動作させるために変更が必要な場所がいくつかあります。コメントで強調表示された変更を含む完全な 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();
    }           
}
于 2013-01-24T23:05:15.453 に答える