2016-04-19 49 views
1

これは私の最初のAndroidアプリであり、いくつか問題があります。私はmenu_item.xmlをteste_menu.xmlのFragmentとして使いたいが、何が間違っているのか分からない。Androidでフラグメントを使用しようとするとエラーが発生する

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.nunog.myapplication12, PID: 5342 
    java.lang.NullPointerException 
     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:392) 
     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2743) 
     at android.widget.ListView.makeAndAddView(ListView.java:1811) 
     at android.widget.ListView.fillDown(ListView.java:697) 
     at android.widget.ListView.fillFromTop(ListView.java:763) 
     at android.widget.ListView.layoutChildren(ListView.java:1641) 
     at android.widget.AbsListView.onLayout(AbsListView.java:2564) 
     at android.view.View.layout(View.java:15749) 
     at android.view.ViewGroup.layout(ViewGroup.java:4880) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
     at android.view.View.layout(View.java:15749) 
     at android.view.ViewGroup.layout(ViewGroup.java:4880) 
     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
     at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
     at android.view.View.layout(View.java:15749) 
     at android.view.ViewGroup.layout(ViewGroup.java:4880) 
     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
     at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
     at android.view.View.layout(View.java:15749) 
     at android.view.ViewGroup.layout(ViewGroup.java:4880) 
     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2358) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2071) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1256) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6635) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:613) 
     at android.view.Choreographer.doFrame(Choreographer.java:583) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:146) 
     at android.app.ActivityThread.main(ActivityThread.java:5593) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
     at dalvik.system.NativeStart.main(Native Method) 

Menu.class

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Menu extends ListActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // storing string resources into Array 
     String[] menu_entries = getResources().getStringArray(R.array.menu_options); 

     // Binding resources Array to ListAdapter 
     this.setListAdapter(new ArrayAdapter<String>(this, R.layout.teste_menu, R.id.label, menu_entries)); 

     ListView lv = getListView(); 

     // listening to single list item on click 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
            int position, long id) { 

       // selected item 
       String product = ((TextView) view).getText().toString(); 

       // Launching new Activity on selecting single List Item 
       Intent i = new Intent(getApplicationContext(), SingleListItem.class); 
       // sending data to new activity 
       i.putExtra("product", product); 
       startActivity(i); 

      } 
     }); 
    } 
} 

MenuItemFragment.class

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class MenuItemFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.menu_item, container, false); 
     return view; 
    } 
} 

teste_menu.XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffffff" 
    android:weightSum="1"> 

    <fragment 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:name="com.example.nunog.myapplication12.MenuItemFragment" 
     android:id="@+id/fragment2" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     tools:layout="@layout/menu_item" /> 
</RelativeLayout> 

menu_item.XML

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/label" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#670000" 
    android:textColor="#ffffff" 
    android:padding="25dip" 
    android:textSize="30sp" 
    android:textStyle="bold"> 
</TextView> 

答えて

0

それはListViewに使用するレイアウトのFragment内部を使用してしても意味がありません。

また、使用しているArrayAdapterコンストラクタのドキュメントを参照すると、2番目のパラメータは使用するレイアウトファイルのIDです.3番目のパラメータは、指定されたレイアウトファイル内のTextViewのIDです。第2のパラメータ。レイアウトファイルteste_menuには、IDがlabelTextViewがありません。

使用したいレイアウトファイルのみを次のように別のコンストラクタを使用することができますし、それが動作することでTextView持っているので:

this.setListAdapter(new ArrayAdapter<String>(this, R.layout.menu_item, menu_entries)); 
+0

おかげで多くのことを。私はあなたの説明を理解しています。 しかし、「ListViewに使用されているレイアウト内にフラグメントを使用することは意味がありません」と言ったとき。私はそれをやろうとしているのと反対です。私は私のレイアウト内の断片としてListViewを使用したい。 –

+0

'Fragment'の中に' ListView'を入れて、その 'Fragment'を' Activity'のレイアウトに入れたいのですか? –

+0

正確に。それが可能だ? –

関連する問題