【问题标题】:Using ListView : How to add a header view?使用 ListView :如何添加标题视图?
【发布时间】:2011-12-20 04:07:19
【问题描述】:

我看the ListView API 我看到了方法:

addHeaderView(View v)

我想做的是在列表上方有一个布局,这可能吗?

我尝试做类似的事情:

  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 
  addHeaderView(et); //makes app crash

我也试过了

setContentView(R.layout.tryview);

但它也会导致应用崩溃。

非常感谢您的帮助!

编辑:这个类的代码是:

public class GroupsActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String your_array_contents[] = {"a","ab","c"};
  setListAdapter(new ArrayAdapter<String>(this, R.layout.groups_layout, your_array_contents));
  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 

  ListView lv = getListView();
  lv.setTextFilterEnabled(true);
  lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
    android.R.layout.simple_list_item_multiple_choice, your_array_contents));
    lv.addHeaderView(et); //makes app crash
  lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
      // When clicked, show a toast with the TextView text
     // Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
          //Toast.LENGTH_SHORT).show();
    }
  });
}


}

【问题讨论】:

  • 看我的回答。希望它会帮助你。另请参阅我在回答中提到的链接。
  • @user370305 - 看看我对你的回答的评论
  • 什么是崩溃日志?我想你会得到 nullPointerException。对吗?
  • @user370305 - 我尝试在调试模式下运行它,但在“lv.addHeaderView(header);”上找不到资源
  • 我建议的链接中的代码只是为了理解目的,你不能直接使用它,因为你不知道我在其中使用了哪个布局,只需简单的 layout.xml 文件对于标题,将其充气以查看并设置为 headerView()。

标签: android android-listview


【解决方案1】:

您可以通过多次调用 addHeaderView() 添加任意数量的标题。您必须在将适配器设置为列表视图之前执行此操作。

是的,您可以像这样添加标题:

LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, myListView, false);
myListView.addHeaderView(header, null, false);

【讨论】:

  • 它不会导致崩溃,如果你在之后添加它。所以我认为这不是问题。
  • @YashwanthKumar 这是根据 android 文档:goo.gl/AWU4K,仔细阅读注意部分:)
  • 是的,我刚才说了,它不会导致崩溃,它不会显示标题视图。
  • 在Android 4.4之前你不能在setAdapter方法之后使用addHeaderView。
  • 干净。谢谢! :) 我只是想知道您是否可以从该布局中调用这些视图并在此 Activity 中使用它。显然它给了一个npe。有什么解决办法吗?
【解决方案2】:

你根本不能用 View 作为 ListView 的 Header。

因为传入的视图必须被膨胀。

查看我在Android ListView addHeaderView() nullPointerException for predefined Views 的回答了解更多信息。

编辑:

看看这个教程Android ListView and ListActivity - Tutorial

编辑 2:此链接已损坏 Android ListActivity with a header or footer

【讨论】:

  • 我尝试添加 View header = (View)getLayoutInflater().inflate(R.layout.headerView,null); ls.addHeaderView(标题);但它崩溃了。 (我在 lv.setAdapter(new ArrayAdapter(GroupsActivity.this, android.R.layout.simple_list_item_multiple_choice, your_array_contents));)
  • 在Android 4.4之前你不能在setAdapter方法之后使用addHeaderView。
  • 链接编辑 2,给出错误 404,所以删除它或修复链接将不胜感激。
【解决方案3】:

我发现将标题视图膨胀为:

inflater.inflate(R.layout.listheader, container, false);

作为 Fragment 的 ViewGroup 的容器,使用从 FragmentLayout 扩展的 LayoutParam 扩展 headerview,但 ListView 期望它是 AbsListView.LayoutParams。

所以,我的问题通过膨胀标题视图来解决,将列表作为容器传递:

ListView list = fragmentview.findViewById(R.id.listview);
View headerView = inflater.inflate(R.layout.listheader, list, false);

然后

list.addHeaderView(headerView, null, false);

回答有点晚,但我希望这可以帮助某人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 2018-10-03
    相关资源
    最近更新 更多