2016-11-07 2 views
0

Я новичок в android и у меня мало времени для выполнения задания, поэтому я понял, что буду использовать «Шаблоны», такие как Master/Detail Flow, чтобы ускорить работу. Возможно, это было не самое лучшее решение, так как мне нужны были времена, чтобы понять данный код, и даже сейчас я все еще не понимаю все ... Но теперь уже слишком поздно начинать с нуля.Замена NestedScrollView в потоке Master/Detail со списком ListView

У меня есть список рецептов, когда нажимают на рецепт. Я могу видеть детали (выполненные с помощью шаблона Master/Detail-Template). В рецепте есть список ингредиентов и строка с описанием, как ее подготовить. Я написал специальный адаптер, чтобы показать список ингредиентов в фрагменте деталей, и он не работал вначале. Причина в том, что ListView I был помещен в NestedScrollView в «recipe_detail_activity.xml». Это, как я выяснил, не может работать, потому что у них обоих есть механизмы прокрутки. Я попытался заменить NestedScrollView на LinearLayout, поскольку я думал, что это всего лишь простой контейнер, но затем список ингредиентов отображается в верхней части экрана (вместо того, где был один раз NestedScrollView), и описание вообще не отображается.

Способ, которым он работает сейчас: RecipeDetailActivity.java регистрирует фрагмент с recipe_detail_activity.xml в качестве контейнера, а RecipeDetailFragment раздувает recipe_detail.xml, который содержит ListView для ингредиентов и TextView для описания.

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

recipe_activity_detail.xml:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.kalina.kochapp.RecipeDetailActivity" 
tools:ignore="MergeRootFrame"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/app_bar_height" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     app:toolbarId="@+id/toolbar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/detail_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.NestedScrollView 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" > 
</android.support.v4.widget.NestedScrollView> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical|start" 
    android:layout_margin="@dimen/fab_margin" 
    app:layout_anchor="@+id/recipe_detail_container" 
    app:layout_anchorGravity="top|end" 
    app:srcCompat="@android:drawable/stat_notify_chat" /> 

</android.support.design.widget.CoordinatorLayout> 

recipe_detail.xml:

<LinearLayout 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:orientation="vertical"> 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/lv_recipe_ingredients" 
    style="?android:attr/textAppearanceLarge" 
    android:padding="16dp" 
    tools:context="com.kalina.kochapp.RecipeDetailFragment"/> 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/recipe_instructions" 
    style="?android:attr/textAppearanceLarge" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp" 
    android:textIsSelectable="true" 
    tools:context="com.kalina.kochapp.RecipeDetailFragment" /> 

</LinearLayout> 

RecipeDetailActivity.java:

protected void onCreate(Bundle savedInstanceState) { 
[...] 
if (savedInstanceState == null) { 
    // Create the detail fragment and add it to the activity 
    // using a fragment transaction. 
    Bundle arguments = new Bundle(); 
    arguments.putString(RecipeDetailFragment.ARG_ITEM_ID, 
      getIntent().getStringExtra(RecipeDetailFragment.ARG_ITEM_ID)); 
    RecipeDetailFragment fragment = new RecipeDetailFragment(); 
    fragment.setArguments(arguments); 
    getSupportFragmentManager().beginTransaction() 
      .add(R.id.recipe_detail_container, fragment) 
      .commit(); 
    } 
} 

RecipeDetailFragment.java:

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

    // Show the dummy content as text in a TextView. 
    if (mItem != null) { 
     ((TextView) rootView.findViewById(R.id.recipe_instructions)).setText(mItem.instructions); 
    } 

    return rootView; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    ingredients = (ListView)getView().findViewById(R.id.lv_recipe_ingredients); 
    IngredientsListAdapter ila = new IngredientsListAdapter(this.getContext(), mItem.ingredients); 
    ingredients.setAdapter(ila); 
} 
+0

Я все еще не понимаю, в чем проблема? –

+0

проблема заключается в том, что ListView не работает в NestedScrollView, и я понятия не имею, как заменить его чем-то другим:/ – Kalina

ответ

0

Ok, я установил его, добавив "андроида: fillViewport =" истинный "" к моему NestedScrollView. Таким образом, я могу использовать обычный ListView внутри него. Я не знаю, действительно ли это решение, но оно работает.

+0

После того, как вы закончите свой проект и когда у вас есть время, прочитайте о RecyclerView, это так интересно! вы полюбите Держателей, просмотрите типы, адаптеры и RecyclerView, вы можете сделать магию !! приятно слышать, что вы исправили свою проблему.} –

+0

Спасибо @Ninja Coding :) Я постараюсь найти некоторое время, чтобы взглянуть на RecyclerView! – Kalina

Смежные вопросы