我创建了一个应用,其中我的MainActivity
上显示了处理草图:
package app.yeah.app;
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
TextView t1 = (TextView)findViewById(R.id.t1);
//
Fragment fragment;
FragmentManager fragmentManager;
//
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
fragmentManager = getFragmentManager();
fragment = new ProcMenu();
fragmentManager.beginTransaction()
.replace(R.id.frag, fragment).commit();
}
}
通过使用片段,我显示处理草图:
package app.yeah.app;
import android.media.MediaPlayer;
import processing.core.PApplet;
import processing.core.PVector;
public class ProcMenu extends PApplet
{
PVector cur;
float r;
public void setup()
{
//size(240, 400);
smooth();
r = width / 20;
}
public void draw()
{
background(0);
cur = new PVector(mouseX, mouseY);
fill(255, 0, 200, 200);
noStroke();
ellipse(cur.x, cur.y, r, r);
fill(255, 200, 0);
text("X: " + cur.x + ", Y: " + cur.y, r, r);
}
}
草图很容易显示坐标,这很棒但是,我希望能够在我的MainActivity
中访问这些变量,然后在textView
t1上显示它。但是在变量没有更新的情况下,我不知道该怎么做。
textView
位于布局上:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/t1"
android:layout_gravity="center_horizontal" />
</LinearLayout>
</RelativeLayout>
非常感谢。
答案 0 :(得分:2)
您需要将变量从ProcMenu
类传递到MainActivity
类。有两种方法可以做到这一点:
方法1:在ProcMenu
类中创建一个返回坐标的get函数,只要你想更新就从MainActivity
类调用该函数。 / p>
public class MainActivity extends ActionBarActivity {
TextView t1 = (TextView)findViewById(R.id.t1);
ProcMenu fragment;
public void updateText(){
t1.setText(fragment.getCur().x + ", " + framgent.getCur().y);
}
}
public class ProcMenu extends PApplet{
PVector cur;
public PVector getCur(){
return cur;
}
}
方法2 :在MainActivity
班级中创建一个集合函数,然后将MainActivity
的实例传递到ProcMenu
班级。然后只需在需要更新时立即调用setter。
public class MainActivity extends ActionBarActivity {
TextView t1 = (TextView)findViewById(R.id.t1);
ProcMenu fragment = new ProcMenu(this);
public void updateText(PVecotr cur){
t1.setText(cur.x + ", " + cur.y);
}
}
public class ProcMenu extends PApplet{
PVector cur;
MainActivity mainActivity;
public ProcMenu(MainActivity mainActivity){
this.mainActivity = mainActivity;
}
public PVector updateCur(){
mainActivity.updateText(cur);
}
}
你采取哪种方法完全取决于你。
答案 1 :(得分:0)
我使用Handler解决了这个问题,有代码:
活动:
声明和分配全局变量
public static Handler sender = null;
Handler receiver = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.e("Activity", "message received" + msg.obj);
// Do Something.
}
};
设置草图片段时:
PApplet sketch = new Sketch(receiver);
将数据发送到草图:
if (sender!=null)sender.obtainMessage(int what, Object data).sendToTarget();
素描:
声明和分配全局变量:
private static Handler mSender;
Sketch Constructor:
Sketch(Handler sender) {
mSender = sender;
SensorActivity.sender = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.e("Sketch", "message arrived");
// Do Something.
}
};
}
将数据发送到活动:
mSender.obtainMessage(int what, Object data).sendToTarget();