片段后添加方法

时间:2012-07-30 13:20:53

标签: java android android-fragments android-fragmentactivity

我有一个片段是一个“计时器”,我可以在任何地方添加。在片段中,我以编程方式更改textView,并且它运行得很漂亮。我的问题在于使用构造函数膨胀的视图中的视图(?不确定这是否是正确的术语)在它下面的另一个方法中。

public class Timer_fragment extends android.support.v4.app.Fragment {
    int testpins;
    String testedpin;
    TextView text;  
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.timer_frag, container, false);

    TextView text = (TextView) v.findViewById(R.id.pwd_status);
    text.setText("Setting text in fragment not main");
    /* set the TextView's text, click listeners, etc. */
    updateStatus();
    return v;
}

所有代码都没有错误,但是当我尝试添加此方法时:

private void updateStatus() {
            TextView text = (TextView) findViewById(R.id.pwd_status);
            testPin();

            text.setText(testedpin);                         
        }

我在findViewById下面有一条红线,上面写着The method findViewById(int) is undefined for the type Timer_fragment

我想过在我的所有方法中夸大视图并且不返回它们,但是肯定会以某种方式影响性能吗?

在尝试使用视图之前尝试对布局进行充气,但我在单词inflatercontainer上收到错误消息,说明无法解析。

我是否正确地解决了这个问题?

3 个答案:

答案 0 :(得分:4)

您的片段范围内已有一个名为text的成员变量。不要在你的方法中重新声明它,只需分配它。

text = (TextView) v.findViewById(R.id.pwd_status);

private void upateStatus() {
        testPin();
        text.setText(testedpin);                         
    }

答案 1 :(得分:1)

方法'findViewById'由活动提供。虽然此类扩展了Fragment,但除非您向片段提供活动,否则您将无法访问与活动相关的方法调用。退房:http://developer.android.com/reference/android/app/Activity.html#findViewById(int

基本上,要么将活动的实例传递给Timer_fragment:

private final Activity _activity;

Timer_fragment(Activity activity)
{
    _activity = activity;
}
...

private void updateStatus()
{
    TextView text = (TextView) _activity.findViewById(R.id.pwd_status);
    testPin();

    text.setText(testedpin);                         
} 

或者从正在使用的任何活动中设置视图的文本,而不是从计时器类中设置。

答案 2 :(得分:0)

只需将findViewById替换为getActivity().findViewById

findViewById方法在Activity类中定义。碎片不是活动。但是片段可以使用方法getActivity获取对将其添加到屏幕的Activity的引用。