带有BaseAdapter的ListView,只显示一行

时间:2014-09-02 17:09:31

标签: c# android listview xamarin baseadapter

我创建了一个名为AddItemBaseAdapter的类,它在ListView中添加了一个新行。问题是,添加新行时,将删除上一行。要添加新行,我在Main.axml上有一个editTex和一个按钮。对于这种情况,最好使用ArrayAdapter或BaseAdapter继续使用?

AddItemBaseAdapter.cs:

public class AddItemBaseAdapter: BaseAdapter<string> 
{
    string textReceivedEditText;
    Activity context;

    public AddItemBaseAdapter(Activity context, string textReceivedEditText) : base()
    {
        this.context = context;
        this.textReceivedEditText = textReceivedEditText;
    }

    public override long GetItemId(int position){

        return position;
    }

    public override string this[int position] {  
        get { return textReceivedEditText; }
    }

    public override int Count {
        get { return 1; }
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView; // re-use an existing view, if one is available

        if (view == null)
                view = context.LayoutInflater.Inflate (Resource.Layout.newText, null);

        view.FindViewById<TextView>(Resource.Id.singleText).Text = textReceivedEditText;

        return view;
    }
}

OnClick in MainActivity.cs

btnAddNewRow.Click += delegate(object sender, EventArgs e) {

            string textFromEditText = FindViewById<EditText> (Resource.Id.editText).Text;

            if(!(textFromEditText.Equals(string.Empty)))
            {
                _HistoryList = FindViewById<ListView>(Resource.Id.TextHistoryList);

                _HistoryList.Adapter = new AddItemBaseAdapter(this, textFromEditText);
            }

            FindViewById<EditText> (Resource.Id.editText).Text = string.Empty;

};

1 个答案:

答案 0 :(得分:0)

每次单击按钮时,您都在创建一个全新的AddItemBaseAdapter。

_HistoryList.Adapter = new AddItemBaseAdapter(this, textFromEditText);

您的适配器甚至无法存储多个项目。也许尝试使用(或至少研究)ArrayAdapter类来启动。然后,如果您需要更多功能,可以扩展它或编写自己的适配器。