【问题标题】:Not able to access view from onActivityResult()无法从 onActivityResult() 访问视图
【发布时间】: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)

标签: android android-layout


【解决方案1】:

假设 Button 在您的布局文件中定义并且您的代码输入正确,通过在您的类中定义 b 将 b 设置为可通过整个代码访问:

Button b;

然后像这样在 onCreateView() 中访问 b:

b = (Button)view .findViewbyId(1); 

在 onActivityResult 中随便使用 b 即可:

b.setText(str); 

【讨论】:

  • 但在我的情况下,我有多个动态添加的按钮,因此我无法全局声明特定按钮,因为我无法识别我点击了哪个按钮。
  • 你是对的。这行不通。你尝试过使用处理程序吗?我不确定它是否有帮助。在 onActivityResult 内部你发送一个带有 msg.what() 的消息,在你的活动中有一个handleMessage 方法,可以根据需要监听和更改 UI。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多