2014-10-22 2 views
0

Я пытаюсь добавить элементы в пользовательское listview, когда выбрано spinner с помощью следующего кода, но это явно не работает. Я не знаю, как это сделать. Пожалуйста, помогите мне ниже, что мой маленький коддобавить элементы в пользовательский listview через spinner setOnItemSelectedListener

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; 
} 
+0

пожалуйста, кто-то поможет мне – Jack

ответ

2

Я сделал некоторые изменения в Spinner onItemSelected функцию. В приведенном ниже коде замените «yourListView» своим списком, который вы используете.

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 

    } 
}); 

Вышеупомянутый код должен решить проблему, с которой вы сталкиваетесь. Если у вас возникнут какие-либо другие проблемы, сообщите мне.

+0

Спасибо большое Рамштайн я попытаюсь сейчас и я плохо пусть вы знаете – Jack

+0

Вы можете Jack :) – Jickson

+0

жаль братан это работает. – Jack

0

Когда элемент выбран в блесны вы вызываете функцию «generateData()». Но внутри этой функции вы ничего не делаете, чтобы добавлять элементы в пользовательский listview. Все, что вы делаете, - это получение содержимого из базы данных и сохранение его в «items» в массиве.

Для того, чтобы добавить товар в список, Затем добавьте данные в свой адаптер и вызовите yourAdapter.notifyDataSetChanged(). Если вы отправляете код своего адаптера listview, я могу помочь вам лучше решить проблему.

+0

ОК Рамштайн здесь я отправляю мой адаптер код – Jack

0
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; 
    } 

}

0

этот код показывает, как использовать простой ListView:

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)); 

и результат простой 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; 
}  
} 
Смежные вопросы