是否可以改变"样式"列表视图一旦显示?我想要做的是使用simple_list_item_1从列表视图开始,但在填充列表后切换到simple_list_item_multiple_choice。
如果这不可能,有人可以告诉我如何使用文本视图和复选框填充列表视图,因为我发现这很难理解。
一如既往,提前谢谢。
答案 0 :(得分:1)
如果两个视图" simple_list_item_multiple_choice"和" simple_list_item_1"根据复选框的不同,您只需使用" simple_list_item_multiple_choice"您可以在启动时隐藏复选框,加载数据时可以使复选框可见。或者你可以在加载数据时显示一个活动指示器,加载数据后你可以直接移植自定义ListView,认为这个更好。一些示例代码提供了解释。
首先是listView的自定义适配器。此适配器适用于ListView的每个项目。
//Custom Adapter
private class DataAdapter extends BaseAdapter {
@Override
public int getCount() {
if (channelListTitles.size()>0){
return dataArrayList.size(); //dataArrayList is a ArrayList<String>
}
else {
return 0;
}
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
convertView = getActivity().getLayoutInflater().inflate(R.layout.item_view,null); //item_view is the custom view for the items of the ListView
}
if (convertView != null) {
((TextView)convertView.findViewById(R.id.item_view_title)).setText(channelListTitles.get(position)); //item_view_title is the TextView
if(isDataLoaded){ //isDataLoaded is a bool value to indicate if data is loaded
CheckBox checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
checkBox.setVisibility(View.VISIBLE);
}
}
return convertView;
}
}
现在每个列表项的item_view:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkbox"
android:visibility="invisible"/>
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/item_view_title"
android:layout_gravity="center_vertical"/>
</LinearLayout>
现在最后声明一个listView,其中将移植上部自定义视图。发布OnCreateView()的完整代码以便更好地理解。在这里我使用Fragment,如果您使用Activity,则需要更改相应的方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
if (rootView != null) {
ListView listView = (ListView) rootView.findViewById(R.id.item_list);
DataAdapter itemDataAdapter = new DataAdapter();
listView.setAdapter(itemDataAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// OnItemClickListener goes here
}
});
}
return rootView;
}
现在是fragment_main:
<RelativeLayout 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=".MainActivity$PlaceholderFragment">
<ListView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/item_list"/>
</RelativeLayout>
当您想要动态加载数据时,适配器是一个重要因素。基本上,适配器是数据和视图之间的桥梁。获得数据后,您可以使用itemDataAdapter.notifyDataSetChanged();
调用适配器来更新视图。
答案 1 :(得分:0)
是的,你可以这样做,你需要为行创建一个xml。并创建一个适配器类并覆盖getView()并在此处膨胀视图。我总是扩展BaseAdapter。
答案 2 :(得分:0)
@ adelphia,我想使用自定义列表视图。 Follow this tutorials for custom list view(遵循72-84个教程)。