1

我发现 ADT 为 Master/Detail Flow Activity 生成的模板相当迟钝,而且我不喜欢 ListView 没有在布局文件中声明的事实,这迫使我以编程方式使用它。例如,android:background我不只是在布局文件中设置 ListView,而是被迫通过片段onCreateView(...)方法中的 findViewById 找到 ListView,然后调用setBackground(...). 为了可维护性和一般可读性,我想通过布局文件做同样的事情。

相反,我试图在onCreateView“主”片段的方法中膨胀自定义布局:

public class InboxFragment extends ListFragment {

public InboxFragment() {}

private ListView listView = null;

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

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

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    // the following doesn't work
    listView.setAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), 
            android.R.layout.simple_list_item_activated_1, 
            android.R.id.text1, 
            DummyContent.ITEMS));
    // nor does this
    //setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(), 
    //      android.R.layout.simple_list_item_activated_1, 
    //      android.R.id.text1, 
    //      DummyContent.ITEMS));
}

}

然而,调用setListAdapter(甚至setAdapter)似乎没有做任何事情,即使我给 ListView 一个 id 的android:id="@id/android:list"in R.layout.inbox_fragment_layout

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#D3D3D3" />

我的“主”活动只是调用片段布局:

public class InboxActivity extends FragmentActivity {

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

}

inbox_phone_layout.xml:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragmentPhoneInbox"
    android:name="com.justin.inbox.InboxFragment"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1" />

相反,我看到的是一个空白页面,它看起来根本没有加载 ListView。我在这里做错了什么?GitHub 上的示例项目

4

1 回答 1

1

我通过更改inbox_phone_layout.xml为以下内容解决了您的问题:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragmentPhoneInbox"
    android:name="com.justin.inbox.InboxFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
于 2013-04-30T00:26:28.450 回答