2016-01-13 120 views
1

我想在一个片段中得到一个FloatingButton为什么我的应用程序因为ImageView而崩溃?

XML:

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Demand" 
    android:id="@+id/frag_demand" 
    android:layout_gravity="center_horizontal|top" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

<ImageView 
    android:layout_width="65dp" 
    android:layout_height="65dp" 
    android:id="@+id/imageButton" 
    android:background="@drawable/oval" 
    android:elevation="10dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginBottom="20dp" 
    android:layout_marginRight="15dp" 
    android:src="@drawable/ic_menu_add"/> 

JAVA:

public class DemandFragment extends Fragment { 

    MenuItem fav; 

    ImageButton floatButton; 

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

     floatButton = (ImageButton) rootView.findViewById(R.id.imageButton); 
     floatButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Snackbar.make(v, "Replace with your own action", Snackbar.LENGTH_LONG); 
      } 
     }); 

     return rootView; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setHasOptionsMenu(true); 

    } 
} 

logcat中给出了:

java.lang.ClassCastException:android.widget.ImageView不能转换到android.widget.ImageButton

这是为什么不工作?

帮助

+1

消息非常明确:'android.widget.ImageView不能转换为android.widget.ImageButton' –

回答

0

从给定异常

java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.widget.ImageButton 

这是非常清楚,你正在尝试投放ImageView的到的ImageButton。在你的情况下,在你的XML您已经定义的ImageView与ID的ImageButton

<ImageView 
android:layout_width="65dp" 
android:layout_height="65dp" 
android:id="@+id/imageButton" 
android:background="@drawable/oval" 
android:elevation="10dp" 
android:layout_alignParentBottom="true" 
android:layout_alignParentEnd="true" 
android:layout_marginBottom="20dp" 
android:layout_marginRight="15dp" 
android:src="@drawable/ic_menu_add"/> 

但在你的片段代码,你这样做是

floatButton = (ImageButton) rootView.findViewById(R.id.imageButton); 

其中floatButton是一个ImageButton的不ImageView的,你在定义你的XML和因此例外。

尝试将ImageView更改为ImageButton,将XML或ImageButton更改为ImageView中的Fragment代码。以任何方式做它将工作

0

为什么它崩溃? ImageViews不从ImageButtons延伸。而你的java代码预计不会如此。

要解决问题,您有两种选择。

1 - 因为在任何视图中总是可以调用setOnClickListener,请将您对floatButton的引用更改为View。

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

    floatButton = rootView.findViewById(R.id.imageButton); 
    floatButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Snackbar.make(v, "Replace with your own action", Snackbar.LENGTH_LONG); 
     } 
    }); 

    return rootView; 
} 

2 - 或者,如果你需要的是一个ImageButton的,改变你的xml配置使用的ImageButton(而不是ImageView的),但不改变任何Java代码:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Demand" 
    android:id="@+id/frag_demand" 
    android:layout_gravity="center_horizontal|top" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" /> 

<ImageButton 
    android:layout_width="65dp" 
    android:layout_height="65dp" 
    android:id="@+id/imageButton" 
    android:background="@drawable/oval" 
    android:elevation="10dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginBottom="20dp" 
    android:layout_marginRight="15dp" 
    android:src="@drawable/ic_menu_add"/> 
0

floatButton =( ImageButton)rootView.findViewById(R.id.imageButton);

但在你的xml中它是一个ImageView。您必须在xml中将其更改为ImageButton,反之亦然。

您无法在您的xml中将ImageView转换为ImageButton。

相关问题