在 ListFragment 的适配器显示的列表前添加自定义布局
Add a custom layout before the list displayed by the adapter of a ListFragment
我有一个显示列表的 ListFragment
。都好。我想在列表前面放一些格式良好的文本视图。
我尝试使用文本视图创建线性布局并将其作为 header 添加到列表中,但它不起作用。
以下确实有效:
TextView tv = new TextView(getActivity());
tv.setText(“Some title with comments”);
getListView().addHeaderView(tv);
tv.setGravity(Gravity.LEFT);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
我在列表之前得到了文本,但我想实际设置一个布局,因为我想要具有 2 种不同字体的文本(就像 title/caption 大字体和小描述字体)。
我该怎么做?
我没有定义列表视图的任何布局。我只有一个 ListFragment
和我的自定义 listAdapter
更新:
我也试过但没有用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.headerView = inflater.inflate(R.layout.my_list_header, container, false);
return super.onCreateView(inflater, container, savedInstanceState);
}
稍后设置适配器时:
getListView().addHeaderView(this.headerView);
但我有例外
在您的适配器中,在您的 getView()
内,您可以在位置为 0
时加载页眉布局。
查看我的代码。
public View getView(int position, View convertView, ViewGroup parent) {
if(position==0)
{
//view 1
}
else
{
Rest of the list elements
}
您可以创建具有您需要的细节的自定义视图,然后,您可以为方法 "addHeaderView" 分配视图。
例如:
View header = getLayoutInflater().inflate(R.layout.header, null);
ListView listView = getListView();
listView.addHeaderView(header);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice,android.R.id.text1, names));
以下是在 ListFragment 中正确添加 header 的步骤:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View list_root = inflater.inflate(R.layout.fragment_list, null);
// Get the list header - to be added later in the lifecycle
// during onActivityCreated()
mheaderView = inflater.inflate(R.layout.my_list_header, null);
return list_root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mheaderView != null) this.getListView().addHeaderView(headerView);
// Don't forget to now call setListAdapter()
this.setListAdapter(listAdapter);
}
@Override
public void onDestroyView()
{
super.onDestroyView();
// free adapter
setListAdapter(null);
}
写一个 ArrayAdapter 扩展 ArrayAdapter
然后在 getView 方法中执行此操作...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Contact contact = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_list_item, parent, false);
}
//Do whatever u need to do with that View...
return convertView
}
我有一个显示列表的 ListFragment
。都好。我想在列表前面放一些格式良好的文本视图。
我尝试使用文本视图创建线性布局并将其作为 header 添加到列表中,但它不起作用。
以下确实有效:
TextView tv = new TextView(getActivity());
tv.setText(“Some title with comments”);
getListView().addHeaderView(tv);
tv.setGravity(Gravity.LEFT);
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
我在列表之前得到了文本,但我想实际设置一个布局,因为我想要具有 2 种不同字体的文本(就像 title/caption 大字体和小描述字体)。
我该怎么做?
我没有定义列表视图的任何布局。我只有一个 ListFragment
和我的自定义 listAdapter
更新:
我也试过但没有用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.headerView = inflater.inflate(R.layout.my_list_header, container, false);
return super.onCreateView(inflater, container, savedInstanceState);
}
稍后设置适配器时:
getListView().addHeaderView(this.headerView);
但我有例外
在您的适配器中,在您的 getView()
内,您可以在位置为 0
时加载页眉布局。
查看我的代码。
public View getView(int position, View convertView, ViewGroup parent) {
if(position==0)
{
//view 1
}
else
{
Rest of the list elements
}
您可以创建具有您需要的细节的自定义视图,然后,您可以为方法 "addHeaderView" 分配视图。
例如:
View header = getLayoutInflater().inflate(R.layout.header, null);
ListView listView = getListView();
listView.addHeaderView(header);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice,android.R.id.text1, names));
以下是在 ListFragment 中正确添加 header 的步骤:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View list_root = inflater.inflate(R.layout.fragment_list, null);
// Get the list header - to be added later in the lifecycle
// during onActivityCreated()
mheaderView = inflater.inflate(R.layout.my_list_header, null);
return list_root;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mheaderView != null) this.getListView().addHeaderView(headerView);
// Don't forget to now call setListAdapter()
this.setListAdapter(listAdapter);
}
@Override
public void onDestroyView()
{
super.onDestroyView();
// free adapter
setListAdapter(null);
}
写一个 ArrayAdapter 扩展 ArrayAdapter 然后在 getView 方法中执行此操作...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Contact contact = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.contact_list_item, parent, false);
}
//Do whatever u need to do with that View...
return convertView
}