我想在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_layout
与ListViewActivity
无关,只是它也在那里使用。您不能将活动嵌套在彼此内部,所以唯一的答案是将逻辑包含在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布局的高度,然后查看差异。