2011-07-11 63 views
0

我创建了自定义listview与文本和两个按钮,我设置了arraylist和适配器,但我的listview显示每个元素作为最后,为前例。如果我添加3个元素:“text1”,“text2”,“text3”我的listview显示“text3”,“text3”“text3”,我不知道为什么。Android listview只显示最后一个元素

private ListView lista; 
    private List<Piosenka> listaPiosenek; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    text = (EditText) findViewById(R.id.editText1); 
    lista = (ListView) findViewById(R.id.listView1); 
    lista.setClickable(true);    
} 

public void update_listy() throws MalformedURLException, IOException 
{ 
    final List<Piosenka> listaPiosenek = new ArrayList<Piosenka>(); 

    listaPiosenek.add(new Piosenka("text1")); 
    listaPiosenek.add(new Piosenka("text2")); 
    listaPiosenek.add(new Piosenka("text3")); 

    PiosenkaAdapter adapter = new PiosenkaAdapter(this, listaPiosenek); 

    lista.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View view, int position, long index)    
{ 
      System.out.println("sadsfsf"); 
     } 
    }); 

    lista.setAdapter(adapter); 
} 

编辑:PiosenkaAdapter代码

public class PiosenkaAdapter extends BaseAdapter implements OnClickListener { 
private Context context; 

    private List<Piosenka> listapiosenek; 

    public PiosenkaAdapter(Context context, List<Piosenka> listapiosenek) { 
     this.context = context; 
     this.listapiosenek = listapiosenek; 
    } 

    public int getCount() { 
     return listapiosenek.size(); 
    } 

    public Object getItem(int position) { 
     return listapiosenek.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup viewGroup) { 
     Piosenka element = listapiosenek.get(position); 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.listview_element, null); 
     } 
     TextView tvTytul = (TextView) convertView.findViewById(R.id.tvTytul); 
     tvTytul.setText(Piosenka.getTytul()); 

     Button btnPobierz = (Button) convertView.findViewById(R.id.btnPobierz); 
     btnPobierz.setFocusableInTouchMode(false); 
     btnPobierz.setFocusable(false); 

     btnPobierz.setTag(element); 
     Button btnPlay = (Button) convertView.findViewById(R.id.btnPlay); 
     btnPlay.setFocusableInTouchMode(false); 
     btnPlay.setFocusable(false); 
     btnPlay.setOnClickListener(this); 
     btnPlay.setTag(element); 

     // btnRemove.setId(position); 


     return convertView; 
    } 


    @Override 
    public void onClick(View view) { 
     switch(view.getId()){ 
     case R.id.btnPobierz: 
      Piosenka entry = (Piosenka) view.getTag(); 
      listapiosenek.remove(entry); 
      notifyDataSetChanged(); 
      break; 
     case R.id.btnPlay: 
      entry = (Piosenka) view.getTag(); 
      listapiosenek.remove(entry); 
      notifyDataSetChanged(); 
      break; 
    } 
    } 

}

+0

请发布PiosenkaAdapter的代码,错误很可能在那里。 –

回答

0

尝试......


lista.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 

你可以粘贴你PiosenkaAdapter的代码?

+0

在适配器之前创建列表时,不应该需要发送notifyDataSetChanged()。 –

+0

你可以粘贴你PiosenkaAdapter的代码? –

+0

没有工作。我添加了PiosenkaAdapter代码。 – user838775

0

我不知道你的语言,但Piosenka变量是获取正确getView()

Piosenka element = listapiosenek.get(position); 

但是这看起来很奇怪,我

TextView tvTytul = (TextView) convertView.findViewById(R.id.tvTytul); 
tvTytul.setText(Piosenka.getTytul()); 

Piosenka.getTytul()在我看来是一个静态方法调用,您应该在其中调用element.getTytul()的常规方法。

相关问题