2016-01-08 2 views
0

Я хочу использовать закусочный в моем приложении поэтому я ниже кода для этогоAndroid: закусочная не работает в классе фрагмента

public class FragmentAddProperty extends Fragment 
{ 
    RelativeLayout mRelative 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     view = inflater.inflate(R.layout.layout_1, 
       container, false); 
    mRelative = (RelativeLayout) view.findViewById(R.id.edt_pro_city); 
    Snackbar.make(mRelative, "No images.", Snackbar.LENGTH_LONG).show(); 
    } 

} 

EDIT

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/edt_pro_city" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#f8f8f8" 
android:orientation="vertical" > 



     <ImageView 
      android:id="@+id/sample_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:src="@drawable/icon_list" 
      android:visibility="visible" /> 
      </RelativeLayout> 

В результате я получил следующее сообщение об ошибке

java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to android.support.design.widget.Snackbar$SnackbarLayout 

Как я могу это решить?

Все внушение заметны

+0

Snackbar.make (view, "No images.", Snackbar.LENGTH_LONG) .show(); – Tomislav

+0

введите код xml. –

+0

попробуйте 'build -> clean' в IDE и запустите его снова – Blackbelt

ответ

0

В Snakebar, вы должны передать представление или представление родительского макета. Поэтому просто замените свой идентификатор на вид и замените свой код на это.

Snackbar.make(view, "No images.", Snackbar.LENGTH_LONG).show(); 
+1

, вам лучше объяснить, почему существует проблема опроса, а не просто решение. – starkshang

+1

какая разница? – Blackbelt

0

Например, скажем, ваш существующий макет является RelativeLayout можно добавить CoordinatorLayout относительного расположения следующим образом:

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="200dp" 
    android:id="@+id/myCoordinatorLayout" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true"> 
</android.support.design.widget.CoordinatorLayout> 

Затем убедитесь, что вы передаете CoordinatorLayout в качестве первого аргумента закусочной .make().

final View viewPos = findViewById(R.id.myCoordinatorLayout);  
Snackbar.make(viewPos, R.string.snackbar_text, Snackbar.LENGTH_LONG) 
          .setAction(R.string.snackbar_action_undo, showListener) 
          .show(); 

Это приведет к закусочной показывается в нижней части CoordinatorLayout при условии, функции макияжа().

Если вы передаете представление, которое не является координатором, то Закусочная будет ходить по дереву, пока не найдет координаторLayout или корень макета.

+1

нет нет. В качестве первого параметра метод принимает 'View'. Если бы они хотели обеспечить использование «CoordinatorLayout», они явно использовали бы его как первый параметр, а не общий «View» – Blackbelt

+0

@Blackbelt благодарит меня за то, что я направил вправо – CodingRat

0

Я много работал над Google, чтобы попытаться отобразить закусочную в андроидных фрагментах, но это не так, потому что мне нужно добавить родительское представление как «CoordinatorLayout».

В CoordinatorLayout я использовал всю структуру компоновки, и я дал координаторуLayout в качестве родительского представления для закусочной.

как следующее:

=> В XML-файле

=> класс Java файл

CoordinatorLayout parentLayout = (CoordinatorLayout) rootView.findViewById (R .id.parentLayout);

private void showInternetAlert(){ 

    Snackbar snackbar = Snackbar 
      .make(parentLayout, "No internet connection!", Snackbar.LENGTH_LONG) 
      .setAction("RETRY", new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
       } 
      }); 

    // Changing message text color 
    snackbar.setActionTextColor(Color.RED); 

    // Changing action button text color 
    View sbView = snackbar.getView(); 
    TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
    textView.setTextColor(Color.YELLOW); 

    snackbar.show(); 

} 

Это нормально для меня.

вопрос получил в в XML-файле, который мы должны поместить родительский вид как «CoordinatorLayout»

0

Snackbar не будет работать без CordinatorLayout, вам нужно создать свой fragment_list.xml как этот, или Snackbar snackbar = Snackbar.make(view, R.string.action, Snackbar.LENGTH_LONG); закончится йоту java.lang.NullPointerException

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <ListView 
     android:id="@+id/listView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

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

Почему бы и нет? В документации [здесь] (https://developer.android.com/reference/android/support/design/widget/Snackbar.html) говорится, что для этого требуется 'View', а не' CoordinatorLayout'? – Nikola

+0

display Snackbar in RelativeLayout как первопричина Исключение в моем случае, замените относительный макет whit cordinator устраните проблему. –

2

Вы можете использовать закусочную в Frgamnet.just использовать объект ViewGroup.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    Snackbar.make(container, "Please Check your Internet Connection",Snackbar.LENGTH_LONG).show(); 
} 
Смежные вопросы