2013-02-21 45 views
0

我是编程新手,请解释一下。但是我有一些我从parse.com中取消的对象。当我得到一个对象时,我称这种方法。但我的问题是,每次调用此方法时,都会每次替换第一个项目。我知道这是一个简单的解决方法,我只需要一点帮助。多次使用ListView

private void display(Object name, Object weightClass, Object record, int count) {  


    ListView list = (ListView) findViewById(R.id.list); 
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    list.setAdapter(listAdapter); 
    String fightCard = (name).toString(); 
    listAdapter.add(fightCard); 
    listAdapter.notifyDataSetChanged();   
} 

而且,我知道这是另外一个问题完全是,但我知道我需要仰视的方式来定制自己的列表视图,我想改变颜色和大小。有谁知道一些很好的链接来学习如何做到这一点?在此先感谢

+0

您每次添加对象时都重新创建适配器。这是预期的行为。如果有两件物品出现,我会很惊讶。 – 2013-02-21 23:35:43

+0

然后在我调用这个方法之前创建适配器呢? – 2013-02-21 23:40:11

+1

如果您有时间,请考虑观看以下视频:[Google I/O 2010 - ListView的世界](http://youtu.be/wDBM6wVEO70)。 – 2013-02-21 23:42:30

回答

1

考虑改变方法,这样每次都会返回一个String。 因此,这将是:

private String display(Object name, Object weightClass, Object record, int count) {  

String fightCard = (name).toString(); 
return fightCard; 
} 

然后内的onCreate():

ListView lv = (ListView) findViewById(R.id.list); 
ArrayList<String> your_array_list = new ArrayList<String>(); 

"loop here -> get each String and add it to list : (your_array_list.add(fightCard)) " 

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

    lv.setAdapter(arrayAdapter); 

一步一步:
1.在你的布局文件
2查找ID声明你的ListView项。声明您将用于存储项目的ArrayList
3.将项目添加到您的数组列表。在这里,您可以从方法循环中获取它们,直到将它们全部添加为
4.声明ArrayAdapter
5。设置数据您的ListView背后

+1

因为你到目前为止我所有的问题,看看[这一个](http://stackoverflow.com/questions/15015179/right-and-left-align-in-a-single-listview)很相似。感谢:D – 2013-02-22 01:09:49

+1

希望我的答案真的有帮助,你正在取得进展:) – t0s 2013-02-22 01:11:33

+0

是的,你真的帮助! – 2013-02-22 01:12:08

2

下面应该首先创建方法之外。

ListView list = (ListView) findViewById(R.id.list); 
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
     list.setAdapter(listAdapter); 

,然后再通过适配器插入方法

display(name,weightClass,record,count, adapter); 

或者

只要有适配器全球,在方法中访问。

ArrayAdapter<String> listAdapter; 

public void onCreate(Bundle savedInstanceState) { 

    ListView list = (ListView) findViewById(R.id.list); 
    listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    list.setAdapter(listAdapter); 
//whatever else you want 

}

内,然后你的方法:

private void display(Object name, Object weightClass, Object record, int count) {  

String fightCard = (name).toString(); 
listAdapter.add(fightCard); 
listAdapter.notifyDataSetChanged();   

}

这之后,每次调用此方法时,数据将被抽入适配器。

如果你仍然困惑/卡住,请打我。

+0

恩,是啊,我会如何让它成为全球? – 2013-02-22 00:05:50

+1

查看最新的答案! :) – rennoDeniro 2013-02-22 00:19:10

1

我认为你缺少ArrayAdapter参数试试这个:

ArrayList<String> namesArray = new ArrayList<>(); 
ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, namesArray); 

每一次你有一个新的项目把它添加到namesArray,然后调用

namesArray.add((name).toString()); 

listAdapter.notifyDataSetChanged();

,因为如果你这样做:listAdapter.add(fightCard);它会继续替换您的ListView现有的项目;

希望它有帮助

+0

谢谢!这为我清除了很多! – 2013-02-22 00:37:05