Xamarin ListActivity onTouchEvent(或任何其他触摸侦听器)

时间:2016-03-11 11:35:22

标签: android xamarin ontouchevent listadapter

我正在尝试学习Xamarin,并且作为一个非常基本的第一个应用程序,我试图使用列表适配器。列表显示得很好,但我想用刷子等项目来做事情。我尝试下面的代码,但似乎没有调用OnTouchEvent(也许是因为它没有附加到视图中列表,但是对于"以下"它?当我尝试在MainActivity中使用它时效果很好)。我设法使用OnListItemClick,但对我来说还不够。如何使OnTouchEvent工作或我有什么其他可能性来听取触摸事件?

谢谢

public class SomeList: ListActivity
{

    string[] someArr;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);

        someArr = getArr();

        ListAdapter = new ArrayAdapter<String>(this, Android.Resource.Layout.SwipeListView, someArr); 

    }

    public override bool OnTouchEvent(MotionEvent e) {
        doSomething(e);
    }
}

1 个答案:

答案 0 :(得分:1)

出于您的原因,您可以使用listview开始。

ListView由以下部分组成:

  

行 - 列表中数据的可见表示。

     

Adapter - 将数据源绑定到列表的非可视类   图。

     

快速滚动 - 一种允许用户滚动长度的句柄   列表。

     

Section Index - 一个漂浮在...上的用户界面元素   滚动行以指示列表中当前行的位置   位于。

要创建简单列表,请执行以下操作:

为您的listviewlistview items创建xml:

ListView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <ListView
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="#000000"
        android:id="@+id/listView1" />
</LinearLayout>

ListViewItem

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:id="@+id/relativeLayout"
    android:padding="10dp">
    <TextView
        android:text="Name"
        android:textColor="@android:color/black"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtName" />
</RelativeLayout>

Listview需要一个适配器来显示项目,所以我们应该创建一个:

public class ListAdapter : BaseAdapter<string>
{
    List<string> _list;
    Activity _context;
    public ListAdapter(Activity context, List<string> list)
    {
        _context = context;
        _list = list;
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override Android.Views.View GetView(int position, Android.Views.View convertView, Android.Views.ViewGroup parent)
    {
        View view = convertView;
        if (view == null)
        {
            view = _context.LayoutInflater.Inflate(Resource.Layout.ListItem, null);
        }

        TextView txtName = view.FindViewById<TextView>(Resource.Id.txtName);

        var item = _list[position];

        txtName.Text = item.UserName;

        return view;
    }

    public override int Count
    {
        get
        {
            return _list.Count;
        }
    }

    public override string this[int index]
    {
        get
        {
            return _list[index];
        }
    }
}

然后在Activity中将适配器设置为listview

ListView _listView;
ListAdapter _adapter;
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    SetContentView(Resource.Layout.List);

    _listView = FindViewById<ListView>(Resource.Id.listView1);
    _listView.ItemClick += ItemClick;

    _adapter = new ListAdapter(this, myList);
    _listView.Adapter = _adapter;
}


    void ItemClick (object sender, AdapterView.ItemClickEventArgs e)
    {
        //Do stuff on item click.
    }

多数民众赞成。 有关详细的教程检查Xamarin Documentation

更多链接: Swipe To Refresh

对于更复杂的功能和灵活性,请检查RecyclerView