【发布时间】:2012-12-17 19:31:11
【问题描述】:
我在 Fragment 中有以下场景:
onCreateView(){
view = inflater.inflate(R.layout.mylayout, container, false);
ScrollView sc = (scrollView)view.findViewById(R.id.sc);
generateUI()
return view; }
public void generateUI() {
horizontalllayout = new LinearLayout(getActivity());
horizontalllayout.setOrientation(android.widget.LinearLayout.HORIZONTAL);
Button newbtn = new Button(getActivity());
newbtn.setId(1);
horizontalllayout.addView(newbtn);
newbtn.setOnClickListener(
public void onClick(View v) {
Intent CaputureIntent = new Intent(getActivity(), s.class);
startActivityForResult(CaputureIntent, 664);
} });
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == 1666){
populate("hi");
}
}
public void populate(String str) {
Button b = (Button)getActivity().findViewbyId(1); //Error
b.setText(str);
}
}
我无法接收上下文。当我从 onActivityResult() 调用时,按钮上的文本在 populate() 方法中没有改变。如果我从外部调用相同的方法,则一切正常。谁能帮我解决这个问题。
【问题讨论】:
-
该代码无法编译(onCreateView sig 不存在,“scrollView”为小写,依此类推)。您可能想再试一次并输入真正的代码,看看您是否得到更多/更好的响应。也就是说,startActivityForResult 采用“requestCode”参数并且您传递了 664。您的 onActivityResult 逻辑检查“resultCode”并查找 1666。我没有看到“setResult”,所以不确定为什么它应该更改 onActivityResult 中的按钮文本?
-
使用 if(resultCode == 664) 代替 if(resultCode == 1666)