使用ListView:如何添加标题视图?

时间:2011-11-02 09:49:06

标签: android android-listview

我在the ListView API闲聊 我看到了方法:

  

addHeaderView(查看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();
    }
  });
}


}

3 个答案:

答案 0 :(得分:71)

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

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

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

答案 1 :(得分:29)

您根本无法将View用作ListView的标题。

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

Android ListView addHeaderView() nullPointerException for predefined Views查看我的答案以获取更多信息。

修改

查看本教程Android ListView and ListActivity - Tutorial

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

答案 2 :(得分:0)

我发现将标题视图夸大为:

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);

Kinda的答案很晚,但我希望这可以对某人有所帮助