在android中的listview中需要什么适配器

时间:2014-02-07 16:50:35

标签: android

我正在学习android程序几天但是现在我想知道在listview中使用适配器。请帮助我理解这个主题。我正在学习的代码在下面

       dictionaryListView.setAdapter(new BaseAdapter() {

        @Override
        public View getView(int position, View view, ViewGroup arg2) {
            if (view==null) {
                view=getLayoutInflater().inflate(R.layout.list_item, null);
            }
            TextView textView=(TextView) view.findViewById(R.id.listItemTextView);
            textView.setText(allWordDefinitions.get(position).word);

            return view;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return allWordDefinitions.size();
        }
    });

    dictionaryListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,
                long arg3) {
            Intent intent =new Intent(DictionaryListActivity.this, WordDefinitionDetailActivity.class);
            intent.putExtra("word", allWordDefinitions.get(position).word);
            intent.putExtra("definition", allWordDefinitions.get(position).definition);

            startActivity(intent);
        }
    });

这里有什么需要setadapter方法

4 个答案:

答案 0 :(得分:6)

引用文档

Adapter对象充当AdapterView与该视图的基础数据之间的桥梁。适配器提供对数据项的访问。适配器还负责为数据集中的每个项目创建视图。

您使用BaseAdapter覆盖getView,在其中展开自定义布局并返回视图对象。

http://developer.android.com/reference/android/widget/BaseAdapter.html

 view=getLayoutInflater().inflate(R.layout.list_item, null);// inflate custom layout

 return view;

所以每行都有一个textview。

 @Override
        public View getView(int position, View view, ViewGroup arg2) {
            if (view==null) { // only when view in null inflate the layout
                view=getLayoutInflater().inflate(R.layout.list_item, null);
            }
            TextView textView=(TextView) view.findViewById(R.id.listItemTextView);
            // initialize the textview
            textView.setText(allWordDefinitions.get(position).word);
            // set text to textview
            // position is the index 

            return view; // return view
        }

getCount返回列表的大小,即return allWordDefinitions.size();。这表示listview中的行数。

另请阅读How ListView's recycling mechanism works

您还应该考虑使用ViewHolder模式。

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

答案 1 :(得分:0)

  

Adapter对象充当AdapterView和之间的桥梁   该视图的基础数据。适配器提供对数据的访问   项目。适配器还负责为每个项目创建一个View   在数据集中。

适配器负责为ListView(或其他基于AbsListView的类)中的每个项创建视图,并使用您提供的数据来填充视图。

答案 2 :(得分:0)

enter code here来自Android doc

Adapters in Android are a bridge between the Adapter View (e.g. ListView) 
and the underlying data for that view. Imagine what would 
have been the world without adapters!

enter image description here

如果没有适配器,要实现ListView功能,您需要: 在TextView组中创建ScrollView。 然后,您将必须为TextView的内容实现分页概念。 您还必须编写其他代码以识别TextView中特定行的单击事件。

此处需要了解more

的链接

答案 3 :(得分:0)

适配器是用于获取数据并将其附加到布局控件的组件。

getView()

适配器中的此方法将在每次创建列表项时调用,您将使用它将每个数据附加到特定控件中

getItemId()

此方法您将实现它以返回附加到列表项的每个数据的ID,以便获得

onitemclick

中的ListView事件中的此ID

getItem此方法与getItemId类似但返回对象本身

此方法getCount将返回适配器将为您创建的列表项的计数,并知道将为您调用getView方法的时间