动态添加项目使用自定义适配器Android应用程序,以列表视图 [英] Dynamically add items to list view using custom adapter for Android app
问题描述
所以,现在我有一个自定义的适配器类,它的位置阵列,并将它们添加到ListView。这是所有罚款和花花公子,但我想这个初始化后的位置添加到这个列表视图。例如,有人可以添加位置,它会添加到该ListView控件。这是我的主要活动:
包com.example.listviewtest;
进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.ListView;
公共类MainActivity延伸活动{
私人ListView控件ListView1的;
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
地点location_data [] =新的位置[]
{
新的位置(R.drawable.ic_launcher,位置1,水果!,2万里行,8-4周一至周五\ nclosed太阳),
新的位置(R.drawable.ic_launcher,位置2,素食者!,2万里行,8-5),
新的位置(R.drawable.ic_launcher,位置3,植物!,2万里行,8-5),
新的位置(R.drawable.ic_launcher,位置4,花!,2万里行,8-5),
新的位置(R.drawable.ic_launcher,位置5,烘焙食品!,2万里行,8-5)
};
LocationAdapter适配器=新LocationAdapter(这一点,
R.layout.listview_item_row,location_data);
//adapter.add(new位置(R.drawable.ic_launcher,位置6,素食者!,2万里行,8-5));
是ListView1 =(ListView控件)findViewById(R.id.listView1);
查看标题=(查看)getLayoutInflater()膨胀(R.layout.listview_header_row,空)。
listView1.addHeaderView(头);
listView1.setAdapter(适配器);
}
}
这工作。我想现在做这样的事情 adapter.add(新位置(R.drawable.ic_launcher,位置6,素食者!,2万里行,8-5));
的阵列填充之后。
下面是我的LocationAdapter类:
包com.example.listviewtest;
进口android.app.Activity;
进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ArrayAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;
公共类LocationAdapter扩展ArrayAdapter<地点> {
上下文语境;
INT layoutResourceId;
位置数据[] = NULL;
公共LocationAdapter(上下文的背景下,INT layoutResourceId,位置[]数据){
超级(上下文,layoutResourceId,数据);
this.layoutResourceId = layoutResourceId;
this.context =背景;
this.data =数据;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
查看排= convertView;
LocationHolder支架=无效;
如果(行== NULL)
{
LayoutInflater充气=((活动)上下文).getLayoutInflater();
行= inflater.inflate(layoutResourceId,父母,假);
持有人=新LocationHolder();
holder.imgIcon =(ImageView的)row.findViewById(R.id.imgIcon);
holder.txtTitle =(TextView中)row.findViewById(R.id.txtTitle);
holder.details =(TextView中)row.findViewById(R.id.details);
holder.distance =(TextView中)row.findViewById(R.id.distance);
holder.hours =(TextView中)row.findViewById(R.id.hours);
row.setTag(保持器);
}
其他
{
支架=(LocationHolder)row.getTag();
}
位置的位置=数据[位置]
holder.txtTitle.setText(location.title);
holder.imgIcon.setImageResource(location.icon);
holder.details.setText(location.details);
holder.distance.setText(location.distance);
holder.hours.setText(location.hours);
返回行;
}
静态类LocationHolder
{
ImageView的imgIcon;
TextView的txtTitle;
TextView的细节;
TextView的距离;
TextView的时间;
}
}
我如何能够实现这个任何想法?谢谢你。
- 在您的适配器改变位置从阵列数据[]到 ArrayList和重写适当的构造
- 在 活动中,让您的可变数据的字段(ArrayList类型
- 当你添加一个位置,您可以使用data.add(位置)
- 然后你可以在你的适配器上调用notifyDatasetChanged()
例如code:<一href="http://androidadapternotifiydatasetchanged.blogspot.in/">http://androidadapternotifiydatasetchanged.blogspot.in/
So, right now I have a custom adapter class that takes in an array of Locations and adds them to a ListView. This is all fine and dandy, but I would like to add Locations to this listview after this initialization. For example, someone can "add a Location" and it will add it to this ListView. Here is my Main Activity:
package com.example.listviewtest;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
public class MainActivity extends Activity {
private ListView listView1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Location location_data[] = new Location[]
{
new Location(R.drawable.ic_launcher, "Location 1", "Fruit!", "2 miles", "8-4 mon-fri\nclosed sun"),
new Location(R.drawable.ic_launcher, "Location 2", "Veggies!", "2 miles", "8-5"),
new Location(R.drawable.ic_launcher, "Location 3", "Plants!", "2 miles", "8-5"),
new Location(R.drawable.ic_launcher, "Location 4", "Flowers!", "2 miles", "8-5"),
new Location(R.drawable.ic_launcher, "Location 5", "Baked Goods!", "2 miles", "8-5")
};
LocationAdapter adapter = new LocationAdapter(this,
R.layout.listview_item_row, location_data);
//adapter.add(new Location(R.drawable.ic_launcher, "Location 6", "Veggies!", "2 miles", "8-5"));
listView1 = (ListView)findViewById(R.id.listView1);
View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
listView1.addHeaderView(header);
listView1.setAdapter(adapter);
}
}
This works. I want to now do something like adapter.add(new Location(R.drawable.ic_launcher, "Location 6", "Veggies!", "2 miles", "8-5"));
AFTER filling it with the array.
Here is my LocationAdapter class:
package com.example.listviewtest;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class LocationAdapter extends ArrayAdapter<Location>{
Context context;
int layoutResourceId;
Location data[] = null;
public LocationAdapter(Context context, int layoutResourceId, Location[] data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LocationHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new LocationHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.details = (TextView)row.findViewById(R.id.details);
holder.distance = (TextView)row.findViewById(R.id.distance);
holder.hours = (TextView)row.findViewById(R.id.hours);
row.setTag(holder);
}
else
{
holder = (LocationHolder)row.getTag();
}
Location location = data[position];
holder.txtTitle.setText(location.title);
holder.imgIcon.setImageResource(location.icon);
holder.details.setText(location.details);
holder.distance.setText(location.distance);
holder.hours.setText(location.hours);
return row;
}
static class LocationHolder
{
ImageView imgIcon;
TextView txtTitle;
TextView details;
TextView distance;
TextView hours;
}
}
Any ideas on how I can implement this? Thanks.
- In your adapter change the Locations data[] from array to ArrayList and override the appropriate constructor
- In your activity, make your variable data a field (type ArrayList
- When you add a location you can use data.add(location)
- Then you can call notifyDatasetChanged() on your adapter
Example code: http://androidadapternotifiydatasetchanged.blogspot.in/
这篇关于动态添加项目使用自定义适配器Android应用程序,以列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!