Android 通过微调器setOnItemSelectedListener将项目添加到自定义listview

Android 通过微调器setOnItemSelectedListener将项目添加到自定义listview,android,listview,spinner,Android,Listview,Spinner,当使用以下代码选择微调器时,我尝试将项目添加到自定义listview,但这显然不起作用。我不知道怎么做。请帮帮我,下面是我的小代码 Spnchapter.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, in

当使用以下代码选择微调器时,我尝试将项目添加到自定义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();
            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我现在就试试,我会让你知道的