在activity_main.xml中包括ListView布局,但不包括activity类的调用方式



我想在activity_main.xml中包括几个布局文件

...
    <include layout="@layout/table_layout" />
    <include layout="@layout/relative_layout"/>
    <include layout="@layout/listview_layout"/>
...

前两个很好,但对于,listview_layout.xml在运行应用程序时没有显示任何内容。原因似乎是ListViewActivity类从未被调用(ListViewActivity onCreate未被调用)。因此无法获取listView的数据源。

问题:我应该如何调用ListViewActivity类?

listview_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <ListView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/blue"
        android:id="@+id/listview1">
    </ListView>

ListViewActivity.java

public class ListViewActivity extends AppCompatActivity {
        ListView listview;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_layout);
        listview = (ListView)findViewById(R.id.listview1);
        listview.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
    }
    private List<String> getData(){
        List<String> data = new ArrayList<String>();
        data.add("test1");
        data.add("test2");
        data.add("test3");
        data.add("test4");
        return data;
    }
}

编辑:前两个包括布局集属性:

android:layout_width="match_parent"
android:layout_height="wrap_content"

编辑:

如果我把这些代码放在MainActivity类中,它就可以工作,但如果是这样,我的ListViewActivity似乎就没用了。那么,有没有办法在MainActivity中调用ListViewActivity?

MainActivity.java

public class MainActivity extends AppCompatActivity {

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listview = (ListView)findViewById(R.id.listview1);
        listview.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
}

 private List<String> getData(){
   List<String> data = new ArrayList<String>();
            data.add("test1");
            data.add("test2");
            data.add("test3");
            data.add("test4");
   return data;
}
}

尝试创建一个具有自定义列表视图布局的数组适配器类,您可以在其中传递列表视图数组数据大小和计数。

希望在activity_main.xml 中包括几个布局文件

<include layout="@layout/table_layout" />
<include layout="@layout/relative_layout"/>
<include layout="@layout/listview_layout"/>

包括listview_layoutListViewActivity无关,只是它也在那里使用。您不能将活动嵌套在彼此内部,所以唯一的答案是将逻辑包含在MainActivity中,正如您所说的那样。

共享逻辑的替代方案是使MainActivity扩展ListViewActivity,并在ListViewActivity中添加一个可重写的方法来设置内容视图。

类似这样的东西:

ListViewActivity

public class ListViewActivity extends AppCompatActivity {
        ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        createContentView();
        listview = (ListView)findViewById(R.id.listview1);
        listview.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
    }
    protected void createContentView() {
        setContentView(R.layout.listview_layout);
    }
    private List<String> getData(){
        List<String> data = new ArrayList<String>();
        data.add("test1");
        data.add("test2");
        data.add("test3");
        data.add("test4");
        return data;
    }
}

主要活动

public class MainActivity extends ListViewActivity {
    @Override
    protected void createContentView() {
        setContentView(R.layout.activity_main);
    }
}

您的ListView可能会被隐藏,因为其他视图的高度设置为match_parent/fill_rent,而您的ListView高度设置为wrap_content。尝试更改ListView布局的高度,然后查看差异。

最新更新