Android列表视图仅显示最后一个元素

时间:2011-07-11 11:32:57

标签: android listview arraylist

我使用文本和两个按钮创建了自定义列表视图,我设置了arraylist和适配器,但是我的listview将每个元素显示为最后一个,例如。如果我添加3个元素:“text1”,“text2”,“text3”我的listview显示“text3”,“text3”“text3”,我不知道为什么。

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

}

2 个答案:

答案 0 :(得分:0)

试试这个......


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

您可以粘贴Piosenka适配器代码吗?

答案 1 :(得分:0)

我不知道你的语言,但在getView()

中正确获取Piosenka变量
Piosenka element = listapiosenek.get(position);

但这对我来说很奇怪

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

Piosenka.getTytul()在我看来是一个静态方法调用,你应该对element.getTytul()进行常规的方法调用。