java - 启动时将 Activity 及其布局放置在 Main Activity 上
问题描述
目标:模块化方法
我试图理解一种方法,其中主活动有点像一个阶段,我在它上面堆叠子组件,具有某种模块化方法。
MainActivity.java (父)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
</android.support.constraint.ConstraintLayout>
UserList.java (子)
public class UserList extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_list);
}
public void initView(ArrayList<UserVO> users) {
this.users = users;
userList.setAdapter(new UserListAdapter());
}
class UserListAdapter extends BaseAdapter {
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = layoutInflater.inflate(R.layout.user_list, null);
TextView givenName = view.findViewById(R.id.givenName);
givenName.setText(users.get(i).givenName());
return view;
}
}
}
activity_user_list.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.components.UserList">
<ListView
android:id="@+id/userList"
android:layout_width="395dp"
android:layout_height="715dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp" />
</android.support.constraint.ConstraintLayout>
我相信ListView
在某个地方需要这个,每个单元格都有一个 textField
<TextView
android:id="@+id/givenName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="TextView"
android:textSize="18sp" />
问题
如何将UserList
应用启动添加到 MainActivity?
编辑
我遵循了相同的命名约定。这是一个错误:
java.lang.IllegalStateException:ArrayAdapter 要求资源 ID 为 TextView
解决方案
尝试使用片段,
Activity Main code,
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadData();
}
private void loadData() {
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout,new ListViewFragment())
.commit();
}
}
activity_main layout:(需要使用frame layout来实现fragment)
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_layout"/>
片段代码如下:
public class ListViewFragment extends Fragment {
private String listItems[] = {"vfvd","vdvvfv","vvddv","vfddvvd"}; //static data
ListView userList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_list_view, container, false);
userList = view.findViewById(R.id.userList);
ArrayAdapter arrayAdapter = new
ArrayAdapter(getActivity(),R.layout.user_list_items,listItems);
userList.setAdapter(arrayAdapter);
return view;
}
}
和片段布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ListViewFragment">
<ListView
android:id="@+id/userList"
android:layout_width="395dp"
android:layout_height="715dp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp" />
textview 的代码,我们需要在其中放置 listview 数据
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/givenName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="TextView"
android:textSize="18sp"
xmlns:android="http://schemas.android.com/apk/res/android" />
您必须在我刚刚使用静态数据的片段中实现适配器代码,并且我能够获得您想要的功能。如果您需要进一步的帮助,我可以为您在下面发表评论。谢谢你。
推荐阅读
- regex - 正则表达式提取有效的阿拉伯日期
- wordpress - 我在我的 WordPress 网站上遇到了 Wordpress 重定向黑客
- reactjs - Next.js 带有 Failed prop 类型的错误:prop `href` 在 ` ` 中需要一个 `string` 或 `object`,但是却得到了 `undefined`。仅在本地机器上
- azure - 缺少 Azure Devops 默认的 Microsoft 托管代理池
- uml - 类图中的关联、聚合或组合过多?
- android - 地理定位 API 在 android 中以本地语言显示地址
- angular - 在角度中使用 mat select 进行 mat-table 过滤
- docker - 是否可以在开发模式下不使用 Vault 的“内存”存储?
- java - 删除数组的最大编号
- mysql - MySQL SELECT 按付款方式和状态获取总销售额