【发布时间】:2014-03-21 08:27:47
【问题描述】:
我很困惑,不知道如何使用 startActivityResults 和 setResults 从以前的活动中获取数据。我有一个视图类和一个活动类。
基本上,在我的视图类中,我有这个对话框,它实际上会启动名为 colorActivity 类的活动类。当用户选择是时,它也会将所选圆圈的名称传递给 colorActivity 类。在 colorActivity 类中,允许用户输入特定圆圈的颜色代码,我想将颜色代码传递回视图类。我在使用 startActivityForResult 和 setResult 方法将值从活动传递回视图时遇到问题。补充一下,获取到的数据之后如何使用?
我的代码如下
我的视图类中的 Ontouchevent 代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (int i = 0; i < circles.size(); i++) {
if (circles.get(i).contains(x, y)) {
circleID = i;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new Builder(
getContext());
final EditText text = new EditText(getContext());
builder.setTitle("Adding colors to circles").setMessage(
"Proceed to Enter color");
builder.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di,
int i) {
Intent intent = new Intent(
getContext(),
colorActivity.class);
intent.putExtra("circlename", circleNameList.get(circleID));
startActivityForResults(intent, 1); // error incurred here : The method startActivityForResult(Intent, int) is undefined for the type new DialogInterface.OnClickListener(){}
}
});
builder.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface di,
int i) {
}
});
builder.create().show();
}
}, 3000);
break;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) { // Please, use a final int instead of hardcoded
// int value
if (resultCode == RESULT_OK) {
ccode = (String) data.getExtras().getString("colorcode");
}
}
}
public static String getColorCode() {
return ccode;
}
在colorActivity中:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_ecolor);
circlenametextview = (TextView)findViewById(R.id.circlenametextview);
String circlename = super.getIntent().getStringExtra("circlename");
circlenametextview.setText(circlename);//get the circle name
savebutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(colorActivity.this, ?????);//how to return back to the view class?
colorcode = colorEditText.getText().toString();// I am able to get value right up till this point
Intent resultIntent = new Intent();
resultIntent.putExtra("colorcode", colorcode );
setResult(Activity.RESULT_OK, resultIntent);
finish();
}// onclick
});
}
【问题讨论】:
-
你在哪里说:“这里发生错误:”......在 OnTouchEvent 中,仍然给你那个错误吗?还是 Intent 启动正确(Activity colorActivity 开启)?
-
@donnadulcinea 错误说 The method startActivityForResult(Intent, int) is undefined for type new DialogInterface.OnClickListener(){} ...我无法运行程序,因为有这个错误..
-
首先,尝试在调用中将 getContext() (您未在代码中报告)替换为 getApplicationContext()。然后,如果它有效,我会帮助你恢复你的结果。
-
@donnadulcinea 我尝试用 getApplicationContext() 替换 getContext() 但我也遇到了错误。错误说“方法 getApplicationContext() 未定义新 DialogInterface.OnClickListener(){} 类型”
-
@donnadulcinea 如果我使用 startActivity(intent, colorActivity 可以成功启动。
标签: android android-intent view android-activity