Android 通过微调器setOnItemSelectedListener将项目添加到自定义listview
当使用以下代码选择微调器时,我尝试将项目添加到自定义listview,但这显然不起作用。我不知道怎么做。请帮帮我,下面是我的小代码Android 通过微调器setOnItemSelectedListener将项目添加到自定义listview,android,listview,spinner,Android,Listview,Spinner,当使用以下代码选择微调器时,我尝试将项目添加到自定义listview,但这显然不起作用。我不知道怎么做。请帮帮我,下面是我的小代码 Spnchapter.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, in
Spnchapter.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id)
{
Toast.makeText(getApplicationContext(), Spnchapter.getSelectedItem().toString(),
Toast.LENGTH_LONG).show();
generateData();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
// Spinner
private ArrayList<Item> generateData()
{
ArrayList<Item> items = new ArrayList<Item>();
int verseNumber = 1;
ExternalDbOpenHelper dbOpenHelper = new ExternalDbOpenHelper(this, DB_NAME);
database = dbOpenHelper.openDataBase();
Cursor c = database.rawQuery("select * from friends where chapter = 1 ", null);
c.moveToFirst();
if(!c.isAfterLast())
{
do
{
String name = c.getString(3);
if(c.getString(2).length() == 0)
{
items.add(new Item("", " " + name + " " + c.getString(5)));
}
if(!c.getString(2).equals(""))
{
items.add(new Item(" " + Integer.toString(verseNumber++), " " + name));
}
}
while (c.moveToNext());
}
c.close();
return items;
}
Spnchapter.setOnItemSelectedListener(新的OnItemSelectedListener()
{
@凌驾
已选择公共无效项(AdapterView父项,
视图,内部位置,长id)
{
Toast.makeText(getApplicationContext(),Spnchapter.getSelectedItem().toString(),
Toast.LENGTH_LONG).show();
生成数据();
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
//纺纱机
私有ArrayList generateData()
{
ArrayList items=新建ArrayList();
int-verseNumber=1;
ExternalDbOpenHelper dbOpenHelper=新的ExternalDbOpenHelper(这个,DB_名称);
database=dbOpenHelper.openDataBase();
游标c=database.rawQuery(“从朋友中选择*,其中chapter=1”,null);
c、 moveToFirst();
如果(!c.isAfterLast())
{
做
{
String name=c.getString(3);
if(c.getString(2).length()==0)
{
添加(新项(“,”“+name+”“+c.getString(5));
}
如果(!c.getString(2).equals(“”)
{
items.add(新项(“+Integer.toString(verseNumber++)”,“+name));
}
}
而(c.moveToNext());
}
c、 close();
退货项目;
}
在微调器中选择项目时,调用函数“generateData()”。
但是在这个函数中,您没有做任何事情来向自定义listview添加项目。您所做的只是从数据库中获取内容并将其存储在arrayList“items”中
若要将项目添加到列表中,则必须将数据添加到适配器并调用yourAdapter.notifyDataSetChanged()。如果您发布listview适配器的代码,我可以更好地指导您解决此问题。公共类MyAdapter扩展ArrayAdapter{
public class MyAdapter extends ArrayAdapter<Item> {
private final Context context;
private final ArrayList<Item> itemsArrayList;
public MyAdapter(Context context, ArrayList<Item> itemsArrayList) {
super(context, R.layout.row, itemsArrayList);
this.context = context;
this.itemsArrayList = itemsArrayList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 1. Create inflater
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 2. Get rowView from inflater
View rowView = inflater.inflate(R.layout.row, parent, false);
// 3. Get the two text view from the rowView
TextView labelView = (TextView) rowView.findViewById(R.id.label);
TextView valueView = (TextView) rowView.findViewById(R.id.value);
// 4. Set the text for textView
labelView.setText(itemsArrayList.get(position).getTitle());
valueView.setText(itemsArrayList.get(position).getDescription());
// 5. retrn rowView
return rowView;
}
私人最终语境;
私有最终阵列列表项阵列列表;
公共MyAdapter(上下文上下文,ArrayList itemsArrayList){
super(上下文、R.layout.row、itemsArrayList);
this.context=上下文;
this.itemsArrayList=itemsArrayList;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//1.创建充气机
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
//2.从充气机获取rowView
视图行视图=充气机。充气(R.layout.row,父级,false);
//3.从行视图中获取两个文本视图
TextView labelView=(TextView)rowView.findViewById(R.id.label);
TextView valueView=(TextView)rowView.findViewById(R.id.value);
//4.设置文本视图的文本
setText(itemsArrayList.get(position.getTitle());
valueView.setText(itemsArrayList.get(position.getDescription());
//5.重新调整rowView
返回行视图;
}
}我对微调器的选定函数做了一些更改。在下面的代码中,将“yourListView”替换为您正在使用的listview
Spnchapter.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id)
{
Toast.makeText(getApplicationContext(), Spnchapter.getSelectedItem().toString(),
Toast.LENGTH_LONG).show();
ArrayList<Item> items=generateData();
MyAdapter adapter=new MyAdapter(getApplicationContext(),items);
yourListView.setAdapter(adapter);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
Spnchapter.setOnItemSelectedListener(新的OnItemSelectedListener()
{
@凌驾
已选择公共无效项(AdapterView父项,
视图,内部位置,长id)
{
Toast.makeText(getApplicationContext(),Spnchapter.getSelectedItem().toString(),
Toast.LENGTH_LONG).show();
ArrayList items=generateData();
MyAdapter=新的MyAdapter(getApplicationContext(),items);
setAdapter(适配器);
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
上面的代码应该可以解决您面临的问题。如果您遇到任何其他问题,请告诉我。此代码显示了如何使用简单的列表视图:
private String[] mListStr = {"name1","name2","name3","name4"};
ListView mListView = (ListView)findViewById(R.id.listview1);
mListView.setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mListStr));
private String[]mListStr={“name1”、“name2”、“name3”、“name4”};
ListView mListView=(ListView)findViewById(R.id.listview1);
mListView.setListAdapter(新阵列适配器,
android.R.layout.simple_list_item_1,mListStr));
结果是一个带有字符串数组的简单listview
在代码中,似乎需要使用listview显示项目列表。
因此,您需要编写自己的listview
public class ListViewAdapter extends BaseAdapter {
public final class ListItemView{ //asume your item has
//an image'a string and a button
public ImageView image;
public TextView title;
public Button detail;
}
private List<Item> listItems; //your data
private LayoutInflater listContainer;
public ListViewAdapter(Context context, List<Map<Item> listItems) {
this.context = context;
listContainer = LayoutInflater.from(context); //create view
this.listItems = listItems;
}
public int getCount() {
// TODO Auto-generated method stub
return listItems.size();
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ListItemView listItemView = null;
if (convertView == null) {
listItemView = new ListItemView();
//get list_item layout
convertView = listContainer.inflate(R.layout.list_item, null);
//get elements
listItemView.image = (ImageView)convertView.findViewById(R.id.imageItem);
listItemView.title = (TextView)convertView.findViewById(R.id.titleItem);
listItemView.detail= (Button)convertView.findViewById(R.id.detailItem);
//set listitem to convertView
convertView.setTag(listItemView);
}else {
listItemView = (ListItemView)convertView.getTag();
}
//set text and image
listItemView.image.setBackgroundResource((Integer) listItems.get(
position).get("image"));
listItemView.title.setText((String) listItems.get(position)
.get("title"));
listItemView.detail.setText("click");
//set click listener
listItemView.detail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do something
}
});
return convertView;
}
}
公共类ListViewAdapter扩展了BaseAdapter{
公共最终类ListItemView{//a您的项目已
//一个图像、一个字符串和一个按钮
公众形象;
公共文本视图标题;
公共按钮细节;
}
私有列表listItems;//您的数据
专用布局器列表容器;
公共ListViewAdapter(上下文,ListContext,请有人帮我向你倾诉这么多Ramstein我现在就试试,我会让你知道的