[英]C# Xamarin How to use a existing List in a class?
我正在為一個問題而苦苦掙扎。
在我的MainActivity.cs文件中,我做了一個這樣的列表:
//Define
public List<products> mItems;
在這里,我創建了列表:
mItems = new List<products>();
在這里,我填寫列表:
foreach (var property in Array)
{
//Convert every value in Array to string
var propertyList = JsonConvert.DeserializeObject<List<products>>(property.ToString());
//Add all strings to List
mItems.AddRange(propertyList);
}
現在,我想在另一個類中使用此List,因此在新類中使用此代碼(將其稱為“ Class2”):
public List<products> mItems;
但是mItems為Null,我在做什么錯。
再次更新當然有一個錯誤。
在MainActivity中,我做了以下更改:
private List<products> mItems = new List<products>();
public List<products> ProductList
{
get { return mItems; }
}
在Class2中:
List<products> mItems = MainActivity.ProductList;
我不知道自己是否做得很好,但是我的錯誤是:“非靜態字段,方法或屬性需要對象引用”
我不知道該怎么辦! 有什么建議么?
在Class2中,您必須從Class1中獲取它,僅給第二個列表使用相同的名稱是不夠的。
這是一個示例,您應該修改對象編程( https://msdn.microsoft.com/zh-cn/library/dd460654(v=vs.120).aspx#Properties )
public class Class1 {
public List<products> mItems;
public Class1() {
//Startup WebClient
WebClient client = new WebClient();
//Define URL to download
string link = @"http://websitelink.todownload.json.php";
//Download json website content
string json = new WebClient().DownloadString(link);
//Parse json content
var jObject = JObject.Parse(json);
//Create Array from everything inside Node:"Products"
var productPropery = jObject["Products"] as JArray;
mItems = new List<products>();
foreach (var property in Array)
{
//Convert every value in Array to string
var propertyList = JsonConvert.DeserializeObject<List<products>>(property.ToString());
//Add all strings to List
mItems.AddRange(propertyList);
}
}
}
public class Class2 {
public List<products> mItems;
public Class2() {
var class1Instance = new Class1();
mItems = class1Instance. mItems;
}
}
這個答案范圍太廣,無法確切地回答,但我將盡力提供幫助。
示例1,如果要將列表從主活動傳遞到要在主活動中創建的類的實例,則可以在聲明列表的新實例時傳遞該列表。
MyListClass listClass = new MyListClass(productList);
然后在課堂上,你會喜歡
public class MyListClass
{
private List<Products> _productList;
public MyListClass(List<Products> productList)
{
_products = productList
}
}
示例2如果您希望將主要活動中的列表傳遞給一個片段,則有多種方法可以執行此操作。 您可以使用以下內容。
ListFragment listFragment = ListFragment.NewInstance(productList);
然后在片段中有一個靜態類NewInstance,就像這樣。
public class ListFragment :Fragment
{
private List<Products> _productList;
public static ListFragment NewInstance(List<Products> productList)
{
_productList = productList;
ListFragment fragment = new ListFragment();
return fragment;
}
}
示例3您可以使用mainActivity實現的偵聽器,並通過該偵聽器調用將向您返回列表的方法,您使用偵聽器的原因是將片段與任何活動分離,例如:
public class MainActivity : IListFragmentListener
{
//implement the interface below
public List<Products> GetProductsList()
{
return productsList;
}
}
然后你的IListFragmentListener.cs
public interface IListFragmentListener
{
List<Products> GetProductsList();
}
終於在你的片段中
public class ListFragment :Fragment
{
private List<Products> _productList;
private IListFragmentListener _listener;
public override void OnAttach(Context context)
{
base.OnAttach(context);
_listener = (IAddDateFragmentListner)context;
}
private void RandomFragmentMethod()
{
_productList = _listener.GetProductsList();
}
}
從活動到活動只是將一個活動中的列表傳遞給另一個活動的快速提示,據我所知,最干凈的方法是使列表對象可序列化,並在一個活動中將其序列化,然后在您想要的活動中反序列化也通過列表。 這可能會導致性能問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.