2017-01-14 5 views
0

Я построил ящик для навигации. Когда приложение запускается, я направляю пользователя непосредственно в «MainMenuActivity» активность из MainActivity. Внутри «MainMenuActivity» есть кнопка, которая должна направить пользователя на другую деятельность, которая является «списком заказов»; Я применил два части кода, но не работает:как запустить активность из фрагмента навигационного ящика

Первый код:

public class MainMenuActivity extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_mainmenu, container, false); 

    Button Orderlistbtn = (Button) rootView.findViewById(R.id.orderlistbtn); 
    Orderlistbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(MainMenuActivity.this, OrderList.class); 
      startActivity(intent); 
     } 
    }); 

    return rootView; 
} 
} 

приложение не запускается, первый код дает мне следующее сообщение об ошибке в LogCat:

Error:(41, 33) error: no suitable constructor found for Intent(MainMenuActivity,Class<OrderList>) 
    constructor Intent.Intent(String,Uri) is not applicable 
    (argument mismatch; MainMenuActivity cannot be converted to String) 
    constructor Intent.Intent(Context,Class<?>) is not applicable 
    (argument mismatch; MainMenuActivity cannot be converted to Context) 

Второй код:

public class MainMenuActivity extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.activity_mainmenu, container, false); 

    Button Orderlistbtn = (Button) rootView.findViewById(R.id.orderlistbtn); 
    Orderlistbtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(getActivity(), OrderList.class); 
      startActivity(intent); 
     } 
    }); 

    return rootView; 
} 
} 

но приложение падает, как только он начинает со следующей ошибкой LogCat

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{package/package.MainMenuActivity}: java.lang.ClassCastException: package.MainMenuActivity cannot be cast to android.app.Activity 

это "activity_mainmenu.xml" Файл:

<RelativeLayout 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" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" 
android:background="@android:color/background_light"> 


<Button 
    android:background="#ffff8800" 
    android:textColor="@android:color/white" 

    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="   My order list  " 
    android:id="@+id/orderlistbtn" 

    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    /> 


</RelativeLayout> 
+1

использование 'getActivity()' вместо 'MainMenuActivity.this' –

+0

@Aloweiwi ПОКАЗАТЬ СВОЮ XML' 'activity_mainmenu' –

+0

MainMenuActivity' не является «активностью», но где-то вы рассматриваете его как таковой. Если «Я направляю пользователя непосредственно к« MainMenuActivity »активности из MainActivity.», Вы имеете в виду, что вы вызываете «startActivity()» с таргетингом «Intent» MainMenuActivity, то это ваша проблема. –

ответ

2

getActivity() в Fragment возвращает активность фрагмента в настоящее время связан.

Intent intent = new Intent(getActivity(), OrderList.class); 
startActivity(intent); 

Редактировать

Во-вторых, Вы получаете ClassCastException

Брошенный, чтобы указать, что код попытался бросить объект к подкласса которого не является пример.

+0

@Aloweiwi, пожалуйста, напишите свой 'xml' –

0

Используйте ниже код для вызова следующей активности, Надеюсь, что это будет решить вашу проблему

Intent intent = new Intent((ParentActivity)getActivity(), NextActivity.class); 
(ParentActivity)getActivity().startActivity(myIntent); 
Смежные вопросы