17

onCreateView(LayoutInflater, ViewGroup, Bundle)から自分のビュー階層を戻してフラグメントレイアウトをカスタマイズしようとしています。これは私のカスタムビューを膨らませますが、内部を膨らませる代わりにビューを積み重ねているようです。すべてを一度に見ることができます。どんな助けもありがとうございます。カスタムビュー階層を持つAndroid + ListFragment

MyActivity.java:

public class MyActivity extends FragmentActivity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { 
      ArrayListFragment list = new ArrayListFragment(); 
      getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit(); 
     } 
    } 

    public static class ArrayListFragment extends ListFragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      inflater.inflate(R.layout.main, container); 
      return super.onCreateView(inflater, container, savedInstanceState); 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      String List[] = {"Larry", "Moe", "Curly"}; 
      setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, List)); 
     } 
    } 
} 

main.xml

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

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="THIS IS A BUTTON" /> 

    <ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00FF00" 
    android:layout_weight="1" 
    android:drawSelectorOnTop="false" /> 

    <TextView 
    android:id="@android:id/empty" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FF0000" 
    android:text="No data" /> 
</LinearLayout> 
+0

また注目すべきは、私はアンドロイド-サポート-V4を使用しています。 Androidのドキュメントから は、それが明確に述べている: は「ListFragmentは、単一のリスト ビューで構成され、デフォルトのレイアウトを持っているしかし、あなたが望むならば、あなたは(onCreateViewから独自のビュー階層を返す により、フラグメントレイアウトをカスタマイズすることができます。これを行うには、ビュー階層にID "@android:id/list"(または コードの場合はリスト)の ListViewオブジェクトが含まれている必要があります。 – worked

答えて

33

私はListFragmentクラスのonCreateViewメソッド内の新しいビューを返していませんでした。たとえば、

 @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.main, null); 
      return view; 
     } 

すべては今でもAndroid搭載です!

+4

あなたの 'onCreateView'の最初の行は必要ありません(実際に何もしていません...)インフレータはすでに渡されています(これはあなたが使用しています)。 – ashughes

+1

良い点...更新しました。 – worked

+0

詳細を教えてください。 –

1
getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit(); 

リストは受け入れられません。フラグメントを探しています。私はあなたがこのパターンを使用

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View root = inflater.inflate(R.layout.main, container, false); 
return root; 
} 
2

は、完璧に動作します!

inflater.inflate(R.layout.list_layout, container, false); 

パブリックビューインフレート(XmlPullParserパーサ、のViewGroupの根、ブールattachToRoot)膨張した階層はルートパラメータに添付するかどうか

attachToRoot? falseの場合、ルートは、XMLのルートビューのLayoutParamsの正しいサブクラスを作成するためにのみ使用されます。

0

をより良いと思う

2

最適化された方法とショットコード

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.list_alphabet, container, false); 
    } 
関連する問題