2016-04-10 19 views
0

Zaten birkaç konudan bir ara, ancak sorunun cevabını bulamıyor musunuz? (ListView ile) benim MenuFragment.javaArrayAdapter, kaynak kimliğinin bir TextView olmasını gerektirir, neden?

public class MenuFragment extends ListFragment { 

    private ArrayList<Recipe.RecipeType> mUsedRecipeType; 
    private ArrayList<Recipe> mRecipes; 
    private ListView mRecipeTypeListView; 

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

     mRecipeTypeListView = (ListView) view.findViewById(android.R.id.list); 
     mRecipeTypeListView.setEmptyView(view.findViewById(android.R.id.empty)); 


     return view; 
    } 

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

     mRecipes = RecipeLab.get(getActivity()).getRecipes(); 
     mUsedRecipeType = new ArrayList<>(); 
     calculateTypes(); 

     Log.d(MainActivity.TAG, "length arr " + mUsedRecipeType.size()); 

     ArrayAdapter<Recipe.RecipeType> adapter = new ArrayAdapter<Recipe.RecipeType>(getActivity(), 
       android.R.layout.simple_list_item_1, mUsedRecipeType); 
     setListAdapter(adapter); 

//  RecipeTypeAdapter recipeTypeAdapter = new RecipeTypeAdapter(mUsedRecipeType); 
//  setListAdapter(recipeTypeAdapter); 

     setRetainInstance(true); 
    } 

// private class RecipeTypeAdapter extends ArrayAdapter<Recipe.RecipeType> { 
// 
//  public RecipeTypeAdapter(ArrayList<Recipe.RecipeType> recipeTypes) { 
//   super(getActivity(), 0, recipeTypes); 
//  } 
// 
//  @Override 
//  public View getView(int position, View convertView, ViewGroup parent) { 
//   if (convertView == null) 
//    convertView = getActivity().getLayoutInflater().inflate(R.layout.list_item_recipe_type, parent, false); 
// 
//   Recipe.RecipeType recipeType = getItem(position); 
// 
//   TextView titleTextView = (TextView) convertView.findViewById(R.id.recipe_type_list_item_titleTextView); 
//   titleTextView.setText(recipeType.toString()); 
// 
//   return convertView; 
//  } 
// } 

    private void calculateTypes() { 

     for (Recipe recipe: mRecipes) { 
      if (!mUsedRecipeType.contains(recipe.getRecipeType())) 
       mUsedRecipeType.add(recipe.getRecipeType()); 
     } 
    } 
} 

benim

<?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="wrap_content" 
       android:background="@drawable/background_activated_recipe_type" 
       android:orientation="vertical"> 

    <TextView 
     android:id="@+id/recipe_type_list_item_titleTextView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="4dp" 
     android:paddingRight="4dp" 
     android:textStyle="bold" 
     android:gravity="center"/> 

</LinearLayout> 

ve ben bir hata yığını var (TextView ile) list_item_recipe_type.xml

04-10 21:44:15.206 29961-29980/? I/OpenGLRenderer: Initialized EGL, version 1.4 
04-10 21:44:15.263 29961-29961/? E/ArrayAdapter: You must supply a resource ID for a TextView 
04-10 21:44:15.263 29961-29961/? D/AndroidRuntime: Shutting down VM 
04-10 21:44:15.265 29961-29961/? E/AndroidRuntime: FATAL EXCEPTION: main 
                Process: com.luxary_team.simpleeat, PID: 29961 
                java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
                 at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:393) 
                 at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
                 at android.widget.AbsListView.obtainView(AbsListView.java:2346) 
                 at android.widget.ListView.makeAndAddView(ListView.java:1876) 
                 at android.widget.ListView.fillDown(ListView.java:702) 
                 at android.widget.ListView.fillFromTop(ListView.java:763) 
                 at android.widget.ListView.layoutChildren(ListView.java:1671) 
                 at android.widget.AbsListView.onLayout(AbsListView.java:2148) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1207) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) 
                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) 
                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) 
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273) 
                 at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678) 
                 at android.view.View.layout(View.java:16636) 
                 at android.view.ViewGroup.layout(ViewGroup.java:5437) 
                 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171) 
                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931) 
                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                 at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                 at android.view.Choreographer.doFrame(Choreographer.java:606) 
                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                 at android.os.Handler.handleCallback(Handler.java:739) 
                 at android.os.Handler.dispatchMessage(Handler.java:95) 
                 at android.os.Looper.loop(Looper.java:148) 
                 at android.app.ActivityThread.main(ActivityThread.java:5417) 
                 at java.lang.reflect.Method.invoke(Native Method) 
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView 
                 at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
                 at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)  
                 at android.widget.AbsListView.obtainView(AbsListView.java:2346)  
                 at android.widget.ListView.makeAndAddView(ListView.java:1876)  
                 at android.widget.ListView.fillDown(ListView.java:702)  
                 at android.widget.ListView.fillFromTop(ListView.java:763)  
                 at android.widget.ListView.layoutChildren(ListView.java:1671)  
                 at android.widget.AbsListView.onLayout(AbsListView.java:2148)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1207)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)  
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:435)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)  
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743)  
                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586)  
                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1495)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)  
                 at android.widget.FrameLayout.onLayout(FrameLayout.java:273)  
                 at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2678)  
                 at android.view.View.layout(View.java:16636)  
                 at android.view.ViewGroup.layout(ViewGroup.java:5437)  
                 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2171)  
                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1931)  
                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)  
                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)  
                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)  
                 at android.view.Choreographer.doCallbacks(Choreographer.java:670)  
                 at android.view.Choreographer.doFrame(Choreographer.java:606)  
                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)  
                 at android.os.Handler.handleCallback(Handler.java:739)  
                 at android.os.Handler.dispatchMessage(Handler.java:95)  
                 at android.os.Looper.loop(Looper.java:148)  
                 at android.app.ActivityThread.main(ActivityThread.java:5417)  
                 at java.lang.reflect.Method.invoke(Native Method)  
                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Önce, açıklama görüldüğü haliyle kod, ArrayAdapter kullanmak istedim, ancak standart aldıktan sonra standart standart olarak bir hata almaya karar verdikten sonra list_item.xml. Ama her zaman bir ve aynı hata var. Söyle bana, neyin var? öğe belki sıralayıcı kimliği ile denemek ve offcourse android.R.layout.simple_list_item_1 o R.layout do için

+0

çalışması yapılmalıdır 'simple_list_item_1' sadece' TextView' vardır, yüzden ArrayAdapter içinde olan tek görünümünü kullanmak çalışıyor. – Petro

+2

Kendi düzeninizi kullanmak istiyorsanız, sadece bir 'TextView', 'LinearLayout' içinde' TextView 'olmalıdır. –

+0

Ancak standart düzeni kullanırken bile sorun var – abbath0767

cevap

1

ArrayAdapter bulmaya çalışır Metin değerini diziden ayarladığı id="@android:id/text1" ile bir metin görünümü. Özel bir düzen belirtirseniz, metin görünümünün de android:id="@android:id/text1" olduğundan emin olun ya da textViewResourceId öğesini belirttiğiniz ArrayAdapter öğesinin diğer yapıcısını kullanın. Yani

<?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="wrap_content" 
      android:background="@drawable/background_activated_recipe_type" 
      android:orientation="vertical"> 

<TextView 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="4dp" 
    android:paddingRight="4dp" 
    android:textStyle="bold" 
    android:gravity="center"/> 

</LinearLayout> 

bir değişiklik Düşünüyorum

+0

'text1' olması gerekiyordu, üzgünüm – Remco

+0

thx! gerçekten çalışıyor – abbath0767

-1

Bir textview ile özel bir düzen gerekiyor. (id_of_textview) Varsayılan olarak

İlgili konular