C#Xamarin如何在类中使用现有的List?

时间:2018-03-24 10:45:11

标签: c# visual-studio list class xamarin

我正在努力解决问题。

在我的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;

我不知道我是否做得很好,但我的错误是: “非静态字段,方法或属性需要对象引用”

我不知道自己要做什么!有什么建议吗?

2 个答案:

答案 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从一个活动传递到另一个活动的快速说明,据我所知,最简单的方法是使列表对象可序列化并在一个活动中将其序列化,并在希望通过列表的活动中对其进行反序列化太。这可能会导致性能问题