0

単一のレイアウト ページに 4 つのスピナーがあり、それぞれがサーバーからの異なるデータ セットを持っています。Base-Adapter クラス (GETVIEW) メソッドを使用して、表示メンバー パーツを設定しました。

私の質問は: 複数のスピナー コントロールに単一の Base-Adapter クラスを使用することは可能ですか? GETVEW メソッドで別の表示メンバー パーツを設定するにはどうすればよいですか?

注: オンライン データを取得するために WCF RESTful サービスを使用しています。

Base Adapter のサンプル コードを以下に示します。

class EyeColorAdapter : BaseAdapter<MMS>
{
    List<MMS> items;
    Activity context;
    public EyeColorAdapter(Activity context, IEnumerable<MMS> items)
        : base()
    {
        this.context = context;
        this.items = items.ToList();
    }
    public override long GetItemId(int position)
    {
        return position;
    }
    public override MMS this[int position]
    {
        get { return items[position]; }
    }
    public override int Count
    {
        get { return items.Count; }
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;
        if (view == null)
        {
            view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, null);
        }
        // This is single spinner control display part. How to Check multiple spinner control condition here to set Display member part.
        view.FindViewById<TextView>(Android.Resource.Id.Text1).Text = items[position].WONO.ToString();
        view.FindViewById<TextView>(Android.Resource.Id.Text1).SetTextColor(Android.Graphics.Color.Black);
        return view;
    }
}

活動クラス:

  public class Activity1 : Activity
    {
        List<MMS> items1;
        protected override void OnCreate(Bundle bundle)
        {
            try
            {
                base.OnCreate(bundle);
                SetContentView(Resource.Layout.Main);
                var request = HttpWebRequest.Create("http://192.168.0.72/eFACiLiTYPhone/mobileservice/WinPhoneWCFService.svc/listingworkorder/x");
                request.ContentType = "application/json";
                request.Method = "GET";
                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        var content = reader.ReadToEnd();
                        if (string.IsNullOrWhiteSpace(content))
                        {
                            Console.Out.WriteLine("Response contained empty body...");
                        }
                        else
                        {
                            Console.Out.WriteLine("Response Body: \r\n {0}", content);
                        }
                        List<MMS> myDeserializedObjList =
                            (List<MMS>)Newtonsoft.Json.JsonConvert.DeserializeObject(content, typeof(List<MMS>));
                        Spinner spinr = FindViewById<Spinner>(Resource.Id.spinner1);
                        spinr.Adapter = new EyeColorAdapter(this, myDeserializedObjList);
                    }
                }
                var request1 = HttpWebRequest.Create("http://192.168.0.72/eFACiLiTYPhone/mobileservice/WinPhoneWCFService.svc/listingworkorder/x");
                request1.ContentType = "application/json";
                request1.Method = "GET";
                using (HttpWebResponse response1 = request1.GetResponse() as HttpWebResponse)
                {
                    using (StreamReader reader1 = new StreamReader(response1.GetResponseStream()))
                    {
                        var content1 = reader1.ReadToEnd();
                        if (string.IsNullOrWhiteSpace(content1))
                        {
                            Console.Out.WriteLine("Response contained empty body...");
                        }
                        else
                        {
                            Console.Out.WriteLine("Response Body: \r\n {0}", content1);
                        }
                        List<MMS> myDeserializedObjList1 =
                            (List<MMS>)Newtonsoft.Json.JsonConvert.DeserializeObject(content1, typeof(List<MMS>));

                        Spinner spinr1 = FindViewById<Spinner>(Resource.Id.spinner2);
                        spinr1.Adapter = new EyeColorAdapter(this, myDeserializedObjList1);

                        items1 = myDeserializedObjList1;
                        int index = items1.IndexOf(items1.Where(x => x.WONO + "" == Convert.ToString("INDIA2085")).FirstOrDefault());
                        spinr1.SetSelection(index);
                    }
                }
            }
            catch (Exception ex)
            {
                Toast.MakeText(this, ex.InnerException.ToString(), ToastLength.Long);
            }
        }
    }
    public class MMS
    {
        public string WONO { get; set; }
        public string EquipmentNo { get; set; }
        public string Status { get; set; }
        public string JobDescription { get; set; }
        public object Raised { get; set; }
        public string Hier { get; set; }
    }

私はandroid開発に不慣れです。私の理解が間違っている場合は、親切に教えてください。

4

1 に答える 1

0

これは実行可能であり、単一のアダプター実装で実行できます。

あなたの要件は具体的ではないので、2 つのシナリオを考えることができます。

~ 異なるデータを表示する 4 つのスピナーがありますが、同じレイアウトを使用します。

必要なのは、1 つのアダプター クラスの 4 つの異なるインスタンスだけです。もちろん、各インスタンスには、コンストラクターの引数として異なる配列オブジェクトがあります。

MyArrayAdapter adapter1 = new MyArrayAdapter(...., items1, .....);
....
....
MyArrayAdapter adapter4 = new MyArrayAdapter(...., items4, .....);

spinner1.setAdapter(adapter1);
....
....
spinner4.setAdapter(adapter4);

~ 2 番目の可能性は、それぞれ独自のレイアウトを持つ 4 つのスピナー ウィジェットを使用することです。

この場合、getView() メソッドをカスタマイズする必要があります。アイデアを得るために、アダプターのコンストラクターにフラグを渡します。このフラグに基づいて、別のビューをインフレートします。

if (flag == 1) {
    view = context.LayoutInflater.Inflate(R.layout.unique_layout_1, null);
} else if ( flag == 2) {
    view = context.LayoutInflater.Inflate(R.layout.unique_layout_1, null);
}
....
....

いずれの場合も、1 つのアダプターとその複数のインスタンスのみが必要であることに注意してください。これで問題が解決することを願っています。

于 2013-07-22T09:31:10.817 に答える