当前位置: 首页 > 知识库问答 >
问题:

android java从内部类访问,需要声明最终[重复]

文志学
2023-03-14
        TextView countTV = mView.findViewById(R.id.main_left_count);
        final TextView totalTV = mView.findViewById(R.id.main_left_total);
        orderGoodsAdapter = new OrderGoodsAdapter(mContext,mView){
            @Override
            public void onRefreshBottom(int len,int total) {
                super.onRefreshBottom(len,total);
                countTV.setText(String.valueOf(len));
                totalTV.setText(String.valueOf(total));
            }
        };


此代码将显示错误“android java访问来自内部类,需要声明为final”

如果您将变量设置为最终变量,或将变量设置为类字段,则错误将消失。

类字段和final关键字有什么不同?

共有1个答案

越风史
2023-03-14

您应该这样编码:

public class TestActivity extends Activity {

    private OrderGoodsAdapter orderGoodsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        final TextView countTV = findViewById(R.id.main_left_count);
        final TextView totalTV = findViewById(R.id.main_left_total);
        orderGoodsAdapter = new OrderGoodsAdapter(TestActivity.this, mView){
            @Override
            public void onRefreshBottom(int len,int total) {
                super.onRefreshBottom(len,total);
                countTV.setText(String.valueOf(len));
                totalTV.setText(String.valueOf(total));
            }
        };
    }
}

或者你应该这样做

public class TestActivity extends Activity {

    private OrderGoodsAdapter orderGoodsAdapter;
    private TextView countTV;
    private TextView totalTV;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        countTV = findViewById(R.id.main_left_count);
        totalTV = findViewById(R.id.main_left_total);
        orderGoodsAdapter = new OrderGoodsAdapter(TestActivity.this, mView){
            @Override
            public void onRefreshBottom(int len,int total) {
                super.onRefreshBottom(len,total);
                countTV.setText(String.valueOf(len));
                totalTV.setText(String.valueOf(total));
            }
        };
    }
}

您可以检查此以获取更多解释:SO链接

 类似资料:
  • 问题内容: 尝试在内部类内部使用一个类的本地成员时遇到此错误。我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它,因为我将Intellij与Java 8一起使用,但它仍然无法编译。还有其他方法可以在不将其声明为final的情况下进行修复吗?谢谢。 问题答案: 我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它。 如果变量 有效地为final ,则Ja

  • 我知道这个话题听起来像是重复的,但我并不是想在这里调试这个问题,而是想绕过它。 我的程序应该做的是:对于文件夹中的每个文件,创建一个新按钮。如果您单击此按钮,请输入您刚输入的文件夹的名称。 现在我遇到的问题是,“fileName”变量需要放在final中,因为Java提供的是对象的指针,而不是值本身。但如果我这样做,则只会为任何按钮发送最后选择的文件名。

  • 我正在尝试让一个按钮将其值与其他变量进行比较。在onClick方法中,我收到一个错误,说变量在内部类中被访问,需要声明为最终变量。问题是变量应该被更改,所以我无法使其成为最终变量。我如何解决这个问题?这是我的代码:

  • 我的代码有上述错误。我尝试通过将我的btnsav声明为最终版本来修复此问题,但随后我收到另外两个错误: 未知类:“btnsave” 不是一个声明 你知道我如何修复这个错误吗?

  • 变量“适配器”和声明最终的问题。我的IDE一直在告诉“适配器”需要声明为最终,我在哪里以及如何做到这一点?这让我陷入停顿,我似乎无法继续前进。请帮助。它在这里参考了这段代码和问题:来自ListView的Android ImageView

  • 我已经签出了答案,比如变量是在内部类中访问的。需要被宣布为最终,但它没有解决我想要的。 我正在使用GraphView绘制从Google Firebase检索到的数据。数据应该是如下所示的连续线: 但当我运行程序时,它却是这样进行的: 我应该做些什么来解决这个问题?任何形式的帮助都将不胜感激。谢谢!