1

スライド メニューを使用して Android アプリを開発しています。

ListFragmentメニュー項目を表示するために使用するカスタム クラスを作成しました。

public class MenuItem
{
    /**
     * Title to show on sliding menu.
     */
    private String title;
    /**
     * Activity to start when user select a menu item.
     */
    private Class<Activity> activityClass;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Class<Activity> getActivityClass() {
        return activityClass;
    }
    public void setActivityClass(Class<Activity> activityClass) {
        this.activityClass = activityClass;
    }
}

これは私のListFragmentです:

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.com.msx.R;
import com.com.msx.adapters.MenuAdapter;
import com.com.msx.menu.MenuItem;

public class MenuFragment extends ListFragment
{
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState)
    {
        return inflater.inflate(R.layout.menu_list, null);
    }

    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);

        ArrayList<MenuItem> menuItems = getMenuItems();

        MenuAdapter adapter = new MenuAdapter(getActivity(),
                R.layout.menu_row, menuItems);
        setListAdapter(adapter);
    }

    /**
     * Get menu items to show on Sliding menu.
     * @return
     */
    private ArrayList<MenuItem> getMenuItems()
    {
        String[] titles = {
                getActivity().getString(R.string.menu_item_my_lovers),
                getActivity().getString(R.string.menu_item_my_friends),
                getActivity().getString(R.string.menu_item_geo_sex_locator),
                getActivity().getString(R.string.menu_item_sex_affinity),
                getActivity().getString(R.string.menu_item_messages),
                getActivity().getString(R.string.menu_item_statistics)
        };

        // TODO: Add icons for each menu item.
        ArrayList<Class<? extends Activity>> activities = new ArrayList<Class<? extends Activity>>(titles.length);
        activities.add(SelectFriendsActivity);

        ArrayList<MenuItem> items = new ArrayList<MenuItem>(titles.length);
        for(int i = 0; i < titles.length; i++)
        {
            MenuItem item = new MenuItem();
            item.setTitle(titles[i]);
            // TODO: Set icon.
            items.add(item);
        }

        return items;
    }
}

ListFragmentそして今、リストのアダプターをカスタムで埋めようとしていますArrayAdapter。しかし、私がこれをやろうとすると:

ArrayList<Class<Activity>> activities = new ArrayList<Class<Activity>>(titles.length);
activities.add((Class<Activity>)SelectFriendsActivity.class);

次の 2 つのコンパイラ エラーが発生します。

Cannot cast from Class<SelectFriendsActivity> to Class<Activity>    
SelectFriendsActivity cannot be resolved to a type

私がこれを行う場合:

ArrayList<Class<? extends Activity>> activities = new ArrayList<Class<? extends Activity>>(titles.length);
activities.add(SelectFriendsActivity.class);

次のコンパイラ エラーが発生します。

The method add(Class<? extends Activity>) in the type ArrayList<Class<? extends Activity>>
 is not applicable for the arguments (Class<SelectFriendsActivity>)

SelectFriendsActivityこのプロトタイプがあります:

public class SelectFriendsActivity extends android.app.ListActivity

しかし、 SelectFriendsActivity.class を MainActivity.class (アクティビティを拡張する) に変更すると、動作します!

何が起こっていますか?

4

1 に答える 1