如何在Android中的ListView项之前放置一个数字

时间:2013-04-12 13:49:22

标签: java android android-listview android-arrayadapter

在我的列表中,数据显示如下,

test 1
test 2
test 3

但我想向他们展示,

1) test 1
2) test 2
3) test 3

我该怎么做?请帮助。这是我到目前为止所做的代码。

public class AppointmentList extends Activity{

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select_to_delete);

        String[] myStringArray = new String[] { "test 1", "test 2", "test 3"};

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                android.R.layout.simple_list_item_1, myStringArray);

        ListView listView = (ListView) findViewById(R.id.listView1);
        listView.setAdapter(adapter);
    }

}

4 个答案:

答案 0 :(得分:5)

您应该创建自己的自定义适配器类并实现其方法。 。

以下是Custom Adapter类的完整示例:

 private class Adapter extends BaseAdapter {
            private ArrayList<String> array;
            private Context ctx;

            public Adapter(Context ctx) {
                this.ctx = ctx;
                array = new ArrayList<String>();
            }

            @Override
            public int getCount() {
                return this.array.size();
            }

            @Override
            public Object getItem(int position) {
                return this.array.get(position);
            }

            @Override
            public long getItemId(int position) {
                return position;
            }

            /**
             * add a String Item in a List
             * 
             * @param item
             */
            public void addItem(String item) {
                this.array.add(item);
                this.notifyDataSetChanged();
            }

            /**
             * Delete an Item from a List
             * 
             * @param position
             */
            public void deleteItem(int position) {
                this.array.remove(position);
                this.notifyDataSetChanged();
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View newView;

                if (convertView == null) {
                    newView = View.inflate(ctx, R.layout.item_layout, null);
                } else {
                    newView = convertView;
                }

                String txt = (String) this.getItem(position);

//   Here is what you're looking for:
                ((TextView) newView.findViewById(R.id.item_numb)).setText(""
                        + (position + 1) + ". ");
//   End;
                ((TextView) newView.findViewById(R.id.item_text)).setText(txt);

                return newView;
            }

        }

您可以像这样使用适配器:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_to_do_list);

        ListView ls = (ListView) findViewById(R.id.listView);
        Adapter adapter = new Adapter(this);
        ls.setAdapter(adapter);
    }

答案 1 :(得分:2)

您需要创建自定义ArrayAdapter,以便按照您希望的方式从对象中填充ListView

这项技术的优势在于您获得了一种视图回收机制,可以回收Views内部的ListView以减少内存。

简而言之你必须:

1。创建一个表示单行数据的对象。

2. :创建这些对象的ArrayList

3. 使用代码创建包含ListView的布局或将ListView添加到主布局。

4. :创建单行布局。

5。创建ViewHolder,代表Views的支持点,代表数据行的视觉方面。

6。创建一个自定义ArrayAdapter,根据您的需要填充行,其中您将覆盖getView方法并使用position您收到的相关行View的参数,表示行index

7。最后将此ArrayAdapter分配给ListView中的onCreate

您可以通过阅读我写的博客文章了解如何实现这一点:

Create a Custom ArrayAdapter

答案 2 :(得分:0)

您必须创建自定义适配器并使用position+1作为行中的数字

答案 3 :(得分:0)

您可以尝试在列表中显示html内容

例如:

Html.fromHtml("<ol><li> test 1</li></ol>") 

Html Documentation