Запуск действия по намерению из фрагмента запускает пустое действие

Я не смог найти ответ на свою проблему, поэтому я создаю новый вопрос.

У меня есть приложение для Android с TabLayout (+ ViewPagerAdapter) в моей MainActivity, и каждая вкладка является фрагментом. Теперь я хочу начать новую активность с намерением из моего фрагмента. Однажды я хочу открыть действие при нажатии FAB, а в другой раз я хочу открыть другое действие при нажатии FeedItem из моей ленты новостей. Теперь каждый раз, когда я что-то нажимаю, открывается совершенно пустая страница.

Я делаю setContentView в обоих действиях onCreate() на правильном макете, и оба действия (+ макет) работают нормально сами по себе, когда я отображаю их непосредственно на вкладке.

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

Я был бы очень рад, если бы кто-то мог мне помочь, мне это нужно для моего выпускного школьного проекта :)

NewsFragment (где моя лента новостей и FAB):

public class NewsFragment extends ListFragment 
           implements NumberPicker.OnValueChangeListener{

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    ViewGroup v = (ViewGroup)inflater.inflate(R.layout.fragment_news,container,false);

    ... 

    Context con = v.getContext();

    //FAB
    FloatingActionButton fab = (FloatingActionButton) v.findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Click action
            Intent intent = new Intent(con, OfferActivity.class);
            getActivity().startActivity(intent);
        }
    });
}

//Here I watch the Newsfeed Click
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    FeedItem item = (FeedItem) adapter.getItem(position);

    Intent intent = new Intent(getActivity(), BookActivity.class);
    intent.putExtra("item", item);
    intent.putExtra("rideid", rideidArray.get(position));
    intent.putExtra("seats", seatsArray.get(position));
    startActivity(intent);
}
}

Это действие, которое я вызываю FAB:

public class OfferActivity extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.activity_offer);
    ...
}

И Activity, которое я вызываю, щелкнув элемент ListView:

public class DetailsActivity extends AppCompatActivity implements NumberPicker.OnValueChangeListener{

@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.dialog_ride_details);
    ...
}

РЕДАКТИРОВАТЬ: Вот что я получаю в Android Monitor, когда нажимаю FAB. Я сделал этот вызов журнала:

Log.d("onClick: ", getActivity().toString()+ " "+OfferActivity.class.toString());

и получить это

D/onClick:: at.friendlyride.friendlyride.main.MainActivity@bc040c9 class at.friendlyride.friendlyride.main.OfferActivity  
D/OpenGLRenderer: endAllStagingAnimators on 0x7f978af000 (RippleDrawable) with handle 0x7f98e11d40

А вот XML-файл MainActivity, где у меня есть TabLayout:

<android.support.design.widget.CoordinatorLayout 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"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context=".MainActivity">

<!--<include-->
    <!--android:id="@+id/tool_bar"-->
    <!--layout="@layout/tool_bar"-->
    <!--/>-->

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/white"/>
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"  />


person T.Scherner    schedule 02.02.2016    source источник
comment
только для целей отладки вы можете установить цвет фона в макете действия и посмотреть, отображается ли на экране цвет, который вы установили при открытии действия? если да, то действие кажется правильным, но что-то не так с вашей реализацией макета. Если нет, то придется отлаживать функцию.   -  person Thilek    schedule 02.02.2016
comment
где книжная деятельность??   -  person Vivek Mishra    schedule 02.02.2016
comment
Спасибо, все заработало благодаря Шиджилу :)   -  person T.Scherner    schedule 02.02.2016


Ответы (4)


Заменять:

 @Override 
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);
    setContentView(R.layout.dialog_ride_details);
    ... 
} 

С:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_ride_details);
        ....
}

в вашем классе DetailsActivity

refer http://developer.android.com/reference/android/app/Activity.html
person Shijil    schedule 02.02.2016
comment
Спасибо большое, это было! :D - person T.Scherner; 02.02.2016
comment
Другое дело, знаете ли вы, что делать, чтобы действие открывалось над фрагментом, чтобы, когда я нажимаю кнопку «Назад», действие закрывалось, и я возвращался к фрагменту? :) - person T.Scherner; 02.02.2016

Вам нужно вернуть представление в методе onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,    @Nullable Bundle savedInstanceState) {
    ViewGroup v = (ViewGroup)inflater.inflate(R.layout.fragment_news,container,false);
    ...
    return v;}
person saeed khalafinejad    schedule 02.02.2016
comment
Вернул, просто забыл добавить сюда, спасибо :) - person T.Scherner; 02.02.2016

Как вы добавляете свой фрагмент в Activity?

Я вижу, что вы создаете фрагмент представления и устанавливаете макет активности, но я не вижу, имеет ли ваш xml-файл активности тег <fragment name='fragmentClass'/> или вы используете макет фрейма для динамического добавления фрагмента. Чтобы добавить фрагмент динамически, вы должны использовать getSupportFragmentManager() и BeginTransaction, чтобы добавить свой фрагмент в Activity.

Пожалуйста, добавьте XML-файл активности.

person emaleavil    schedule 02.02.2016

Заменять:

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

С:

 Intent intent = new Intent(getActivity(), OfferActivity.class);
 startActivity(intent);
person Veeresh Charantimath    schedule 02.02.2016