如何在 Android C# 中将变量从(主要活动传递到另一个)活动到自定义视图
本文关键字:活动 另一个 视图 自定义 Android 变量 | 更新日期: 2023-09-27 18:31:33
我是编程新手,在将变量从活动传递到自定义视图时遇到问题。
在我的主要活动中,我使用以下方法将字符串放入新活动(分析):
Intent a = new Intent (this, typeof(Analysis));
a.PutExtra("speedvalues", mapclass.Speed());
StartActivity (a);
在分析活动中,我使用以下方法检索它:
string s = Intent.GetStringExtra("speedvalues");
这一切都很好用。但是,我需要将此字符串传递给另一个类(我的自定义视图类),每当打开新活动时都会调用该类。因为我需要这个字符串来使用我的自定义视图类绘制图形/线条。
有人可以告诉我我该怎么做吗?我尝试将字符串声明为静态字符串,但这导致了异常错误。
编辑:
以下是我的自定义视图类的一部分,应要求:
class Graph : View
{
List<int> speedvalues = new List<int>(StringToListInt(VARIABLE FROM ACTIVITY));
List<PointF> graphpoints = new List<PointF>();
int padding = 100;
public Graph(Context c) : base(c)
{
this.SetBackgroundColor(Color.White);
}
public float MaxSpeed()
{ [...] }
public static List<int> StringToListInt(string x)
{ [...] }
public void GraphPoints()
{ [...] }
protected override void OnDraw(Canvas cv)
{ [...] }
编辑 2:
谢谢你们的回答!我检查了最有用的一个。
我自己也找到了解决方案。我创建了一个新的静态字符串和一个静态方法。我使用静态方法将新的静态字符串分配给"speedvalues"的值:
public class Analysis : Activity
Graph graph;
public static string s5;
protected override void OnCreate (Bundle bundle)
{
[...]
string s4 = Intent.GetStringExtra("speedvalues");
s5 = StringToG (s4);
graph = new Graph(this);
}
private static string StringToG(string s)
{
return s;
}
当然,在 Graph 类中,我使用以下方法检索值:
string speedvalues = Analysis.s5;
到目前为止,这个有效。这个版本是更好还是更差?
您正在分配值,并且已经调用了 ondraw。因此,为了防止ondraw,请找到下面修改了您的代码。
class Graph : View
{
List<int> speedvalues;
List<PointF> graphpoints = new List<PointF>();
int padding = 100;
bool isReady = false;
public Graph(Context c) : base(c)
{
this.SetBackgroundColor(Color.White);
}
public float MaxSpeed()
{ [...] }
public static List<int> StringToListInt(string x)
{ [...] }
public void GraphPoints()
{ [...] }
public void ReadyToDraw(bool ready)
{
isReady=ready;
}
public static List<int> StringToListInt(string x)
{
speedvalues=new List<int>(StringToListInt(x));
}
protected override void OnDraw(Canvas cv)
{
base.OnDraw(canvas);
if(ReadyToDraw)
{
//Your drawing code
}
}
}
然后传递如下所示的值
string s = Intent.GetStringExtra("speedvalues");
Graph g=new Graph(this);
g.StringToListInt(s);//Assign values
g.ReadyToDraw(true);//Set it is ready to draw
g.invalidate(); // Draw
除了其他答案之外,您还有另一个称为"共享首选项"的选项。
您可以在主活动中存储变量并在任何类中获取它。
例如,通过谷歌可以找到许多教程,例如
http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
1. 更改
List<int> speedvalues = new List<int>(StringToListInt(VARIABLE FROM ACTIVITY));
2. 至
List<int> speedvalues ;
3. 更改
public Graph(Context c) : base(c)
{
this.SetBackgroundColor(Color.White);
}
4. 至
public Graph(Context c , string speedvalues ) : base(c)
{
this.peedvalues = new List<int>(StringToListInt(speedvalues));
this.SetBackgroundColor(Color.White);
}
5. 更改
string s4 = Intent.GetStringExtra("speedvalues");
s5 = StringToG (s4);
graph = new Graph(this);
6. 至
string s4 = Intent.GetStringExtra("speedvalues");
graph = new Graph(this , StringToG(s4));
完整代码
class Graph : View
{
List<int> speedvalues ;
public Graph(Context c , string speedvalues ) : base(c)
{
this.peedvalues = new List<int>(StringToListInt(speedvalues));
this.SetBackgroundColor(Color.White);
}
}
base (C# Reference) msdn