2013-03-30 94 views
8

我知道类似这样的问题已经回答,但我似乎已经完成了教程建议和阅读其他职位,但仍然我得到了充气机错误。不知道我做错了什么。请检查代码。非常感谢。android.view.InflateException:二进制XML文件行#7:错误膨胀类片段

编辑:我有一个活动中的两个片段。我在一个片段中有一个按钮,而另一个片段中有一个textview。我想了解片段如何工作,因此我在阅读文档后自己编写了这些代码。当按钮在一个片段中触发时,它会向活动中的其他片段发送一个值。我没能获得片段膨胀

MainActivity.java

 import com.transport.mbtalocpro.PredictedTimeFragment.ButtonClickListener; 
     import android.os.Bundle; 
     import android.support.v4.app.FragmentActivity; 


     public class MainActivity extends FragmentActivity implements ButtonClickListener { 

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


      @Override 
      public void sendCounter(int count) { 
       TestFrag testF = (TestFrag) getSupportFragmentManager().findFragmentById(R.id.bottomHalf); 
       if(testF != null) testF.setCounter(String.valueOf(count)); 

      } 

     } 

PredictedTimeFragment.java

  import android.app.Activity; 
      import android.os.Bundle; 
      import android.support.v4.app.Fragment; 
      import android.view.InflateException; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.View.OnClickListener; 
      import android.view.ViewGroup; 
      import android.widget.Button; 

      public class PredictedTimeFragment extends Fragment { 


      ButtonClickListener bListener; 

      public interface ButtonClickListener { 
       public void sendCounter(int count); 
      } 

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
       super.onCreateView(inflater, container, savedInstanceState); 
       try { 
        View view = inflater.inflate(R.layout.prediction_time, container, false); 
        Button button = (Button) view.findViewById(R.id.test); 
        button.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          test(v); 

         } 
        }); 
       } catch(InflateException e) { 
        e.printStackTrace(); 
        System.out.println("Predicted Time Fragment"); 
       } 
       return super.onCreateView(inflater, container, savedInstanceState); 
      } 

      public void onAttach(Activity activity) { 
        super.onAttach(activity); 
        try { 
        bListener = (ButtonClickListener) activity; 
        } catch (ClassCastException e) { 
        System.out.println("must implemenet Listener"); 
        } 
       } 


      public void test(View view) { 
       bListener.sendCounter(23); 
      } 

     } 

TestFrag.java

 import android.os.Bundle; 
     import android.support.v4.app.Fragment; 
     import android.view.InflateException; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.TextView; 

     public class TestFrag extends Fragment { 

      @Override 
      public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { 
       super.onCreateView(inflator, container, savedInstanceState); 
       try { 
        View view = inflator.inflate(R.layout.test_frag, container, false); 
       } catch(InflateException e) { 
        e.printStackTrace(); 
        System.out.println("Test Fragment"); 
       } 
       return super.onCreateView(inflator, container, savedInstanceState); 
      } 

      public void setCounter(String textS) { 
       TextView text = (TextView) getView().findViewById(R.id.test1); 
       text.setText((String) textS); 
      } 
     } 

activity_main.xml中

 <?xml version="1.0" encoding="utf-8"?> 
     <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"> 

      <fragment 
       android:id="@+id/topHalf" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_weight="0.5" 
       android:name="com.transport.mbtalocpro.PredictedTimeFragment"/> 

      <fragment 
       android:id="@+id/bottomHalf"   
       android:layout_width="fill_parent"   
       android:layout_height="0dp" 
       android:layout_weight="0.5" 
       android:name ="com.transport.mbtalocpro.TestFrag"/> 

     </LinearLayout> 

predicted_time.xml

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/test" 
       android:text="Test" 
       android:layout_width="fill_parent" 
       android:layout_height="30dp" 
       /> 

     </LinearLayout> 

test_frag.xml

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/test1" 
       android:layout_width="fill_parent" 
       android:layout_height="40dp"/> 

     </LinearLayout> 

我想支持蜂蜜预梳版本也和我认为我正在进口阿尔l支持库。

+1

周围的代码可能不会鼓励别人来帮助你。一些基本的细节会很棒。 – WarrenFaith

+0

@WarrenFaith - 我添加了一些关于代码的细节。对于那个很抱歉。我当时很急。谢谢。 – Guru

+0

你不需要在onCreateView中使用片段中的超级调用;只是回到你的观点。 – wkhatch

回答

0

尝试用android.support.v4.app.Fragment

编辑替换你的XML片段:也可以尝试,当你在onCreateView即你的观点仅完成一次超级调用。删除在开始的超级电话,看看是否有帮助

+0

我试过了,没有工作。 – Guru

+0

您是否尝试删除您的超级电话号码?因为你调用了两次。你可以发布logcat吗? –

+0

其实我redid我的工作,它开始工作,我相信它可能是在xml(android:name)片段中的名称我将其更改为class =“片段类的名称” 但我做了一次之前,它没有奏效。不知道为什么上面的代码不起作用。无论如何感谢您的帮助。 – Guru

1

在onCreateView回调你必须返回你膨胀的视图。这样系统就知道要绘制哪个视图。否则,如果您只是以这种方式返回super.onCreateView(...),则不会出现UI。

试试这个:另一个片段的相应

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     try { 
      View view = inflater.inflate(R.layout.prediction_time, container, false); 
      Button button = (Button) view.findViewById(R.id.test); 
      button.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        test(v); 

       } 
      }); 
     } catch(InflateException e) { 
      e.printStackTrace(); 
      System.out.println("Predicted Time Fragment"); 
     } 
     return view; 
    } 

改变返回值。与弹出导入建议再次

import android.support.v4.app.FragmentActivity; 

和进口:

+0

我只是注意到,这是一个旧的,并有正确的解决方案wkhatch评论。 –

3

删除您的import语句。我不知道为什么,但它总是对我有用。

import android.support.v4.app.FragmentActivity; 
1

要修正此错误:

在清单:

<application 
     android:largeHeap="true" 

在.xml文件,则必须删除下面的代码:

android:src="@drawable.. 
android:background="@drawable... 

由于误差超出内存错误

0

更改您的布局小部件ID,它适用于我。

相关问题