2013-07-09 1 views
1

저는 슬라이딩 메뉴로 Android 앱을 개발 중입니다.ListActivity가 활동을 확장합니까?

내가 메뉴 항목을 표시 할 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 목록의 :

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입니다 맞춤 ArrayAdapter 어댑터. 나는이 작업을 수행하려고 할 때 : 나는 이렇게 할 경우

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

:

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

을 나는이 두 컴파일러 오류를 얻을 수

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 

하지만 (활동을 확장) MainActivity.class 에 대한 SelectFriendsActivity.class을 변경하는 경우가 작동!

무슨 일입니까? Activity.class 때문에

+0

'ArrayList l = new ArrayList ()', 아니 ArrayList l = ...' – fge

답변

5

Why [am I] having these errors?

SelectFriendsActivity.class은 동일하지 않다.

ArrayList<Class<Activity>> 대신 List<Class<? extends Activity>>을 선언해야합니다.

증인이 ​​코드 :

final List<Class<? extends Number>> list 
     = new ArrayList<Class<? extends Number>>(); 

    // Both Integer and BigDecimal extend Number 
    list.add(Integer.class); 
    list.add(BigDecimal.class); 

마찬가지로, MenuItem에, 당신의 게터/세터/인스턴스 멤버가/인수로 /가 반환해야 타입 Class<? extends Activity>의 수. 제안 : setter를 놓고 MenuItem을 직접 빌드하십시오. 이렇게하면 불변으로 만들 수 있습니다. 현재 MenuItem 클래스는 이 아니며은 이러한 파괴 된 설정자 때문에 안전한 스레드입니다. Javabeans는 일반적으로 스레드로부터 안전하지 않습니다.

Is there a better way to know which Activity I have to start when user selects a menu item?

코드가 충분하지 않으므로 확실하지 않습니다. 왜 처음에는 클래스를 만들고, 완전히 구성된 인스턴스를 반환하지 않습니까?

+0

답변 주셔서 감사하지만 작동하지 않습니다. 지금 무슨 일이 일어나고 있는지에 대한 세부 사항으로 내 질문을 업데이트했습니다. – VansFannel

+0

어쨌든 괜찮은 코드를 보여줄 수는 없습니다. 이 ListActivity 클래스는 무엇입니까? – fge

+0

그것은 'android.app.ListActivity'입니다. – VansFannel