所以我试图让用户能够在按钮上设置onClickListener,该按钮将在单击时更改TextView。但是,这导致出现最终声明错误,因为我是从内部类调用它的。我不明白为什么要将它设置为最终的,不可更改的变量。我只希望Textview在onclick上接受setText方法,但是在使用片段时会阻止我这样做。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_main, container, false);
    View v2 = inflater.inflate(R.layout.flash_fragment, container, false);

    Button reply = (Button) v2.findViewById(R.id.replyB);

    TextView flashtext = (TextView) v2.findViewById(R.id.flashtext);

    flashtext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //start playing the string word by word
            //on the textview : flashtext
            ***flashtext.setText("test");***
        }
    });

最佳答案

我不明白为什么要求将其设置为最终的,不可更改的变量


因为flashtext会在onCreateView()返回后立即超出范围。它是一个局部变量,因此引用仅在onCreateView()调用期间有效。

如果只想从该侦听器使用flashtext,则使用final是最简单的方法。

如果希望在此片段的其他地方使用flashtext,请使flashtext成为Fragment子类上的一个字段。

10-05 23:49