我正在努力解决问题。
在我的MainActivity.cs中,我创建了一个像这样的列表:
//Define
public List<products> mItems;
我在这里创建了List:
mItems = new List<products>();
在这里,我填写了List:
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是空的,我做错了什么。
再次使用错误进行一次更新。
在MainActivity中,我进行了以下更改:
private List<products> mItems = new List<products>();
public List<products> ProductList
{
get { return mItems; }
}
在Class2中:
List<products> mItems = MainActivity.ProductList;
我不知道我是否做得很好,但我的错误是: “非静态字段,方法或属性需要对象引用”
我不知道自己要做什么!有什么建议吗?
答案 0 :(得分:0)
在你的Class2中,你必须从你的Class1获得它,只是给第二个列表同名不够。
以下是一个示例,您应该修改对象编程(https://msdn.microsoft.com/en-us/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 :(得分:0)
这个答案太宽泛,无法明确回答,但我会尽力帮助。
示例1 如果要将主活动中的列表传递给您在主活动中创建的类的实例,则可以在声明其新实例时传递列表。< / p>
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();
}
}
活动活动 关于将List从一个活动传递到另一个活动的快速说明,据我所知,最简单的方法是使列表对象可序列化并在一个活动中将其序列化,并在希望通过列表的活动中对其进行反序列化太。这可能会导致性能问题