【问题标题】:How to display more information on ListAdapter?如何在 ListAdapter 上显示更多信息?
【发布时间】:2014-08-05 15:56:23
【问题描述】:

我有一个:

List<Fixture> allFixture = new List<Fixture>();

每个灯具:

 class Fixture
{
public int _id { get; set; }
public string Home { get; set; }
public DateTime matchDate { get; set; }
public string Away { get; set; }
}

我可以在 ListAdapter 上只显示 Home[]:

ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, allFixture.Select(x => x.Home).ToArray())

但我想在下面显示如下内容:“Home vs Away”DateTime。 我该怎么做?

【问题讨论】:

标签: c# android listview xamarin listadapter


【解决方案1】:

What Nicola linked 提供了正确的信息。对于您具体要求的内容,您需要实现 custom adapter 并覆盖 getView method

例如:

public class ExampleArrayAdapter extend ArrayAdapterAdapter<MyCustomItem>
{
    private Context mContext;
    private List<MyCustomItems> mCustomItems;

    public ExampleArrayAdapter(Context context, List<MyCustomItem> customItems)
    {
        mContext = context;
        mCustomItems = customItems;
    }

    @Override
    public View getView (int position, View convertView, ViewGroup parent)
    {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // Create the view of your row item here
        View rowView = inflater.inflate(R.layout.my_custom_layout, parent, false);
    }
}

public class MyActivity extends listActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        List<MyCustomItem> customItems = new ArrayList<MyCustomItems();
        // create your items...

        ExampleArrayAdapter arrayAdapter = new ExampleArrayAdapter(this, customItems);
        setListAdapter(arrayAdapter);
    }
}

创建您的 Fixture 布局并在 getView 中对其进行扩展。

my_custom_layout:

<LinearLayout
    android:id="@+id/listItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Default"/>

    <TextView
        android:id="@+id/textDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="20140805"/>

</LinearLayout>

【讨论】:

    【解决方案2】:

    尝试扩展 ArrayAdapter 以不仅仅使用字符串。

    您可以扩展它以使用您的类 Fixture,然后还可以扩展一个新的布局文件而不是 simpleListItemLayout。

    您需要一个新的 xml 文件,您将对其进行扩充。

    1. 扩展数组适配器

      private class SampleAdapter extends ArrayAdapter<Fixture> {
      
      public InteractiveArrayAdapter(Activity context, List<Model> list) {
      super(context, R.layout.rowbuttonlayout, list);
      this.context = context;
      this.list = list;
      }
      
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          View view = null;
      
          LayoutInflater inflator = context.getLayoutInflater();
          view = inflator.inflate(R.layout.YOUR_XML_LAYOUT, null);
          //find views that you want to access and populate here.
          return view;
      }
      }
      
    2. 创建一个新的 xml 文件,这可以是您想要的任何内容,并且在数组适配器中您将扩充新的 xml。

    抱歉,我的格式已全部关闭

    【讨论】:

      【解决方案3】:

      也可以看看http://java.dzone.com/articles/android-listview-optimizations 使用 viewHolder 模式优化您的代码以实现平滑滚动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多