【问题标题】:Is there a way to reference a variable outside onCreate method?有没有办法在 onCreate 方法之外引用变量?
【发布时间】:2019-12-04 03:36:03
【问题描述】:

我似乎无法引用 onCreate 方法之外的变量。有没有办法克服这个问题?我是学生,还在学习。如果有人可以提供帮助,那就太好了。谢谢你。我想将“url”变量引用到“onItemClick”方法,它显示“无法解析符号”。

这是我的代码:

public class CominSoonActivity extends AppCompatActivity implements RecyclerViewClickItemInterface {

    DatabaseReference reference;
    RecyclerView recyclerView;
    ArrayList<Event> list;
    MyAdapter adapter;

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

        recyclerView = findViewById(R.id.myRecycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        list = new ArrayList<Event>();

        adapter = new MyAdapter(CominSoonActivity.this, list, this);
        recyclerView.setAdapter(adapter);

        reference = FirebaseDatabase.getInstance().getReference().child("EventDisplay");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
                {
                    Event e = dataSnapshot1.getValue(Event.class);
                    String url = (String) dataSnapshot1.child("website").getValue();
                    list.add(e);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(CominSoonActivity.this, "Opps.... Something went wrong", Toast.LENGTH_SHORT).show();

            }
        });

        //add back button
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

    }

    @Override
    public void onItemClick(int position) {
        //Uri uri = Uri.parse("http://fareezdanial19.wixsite.com/merlimaulibrary");
        Uri uri = Uri.parse(url);
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);

    }

    //taking the user back to the previous activity
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == android.R.id.home) {

            Intent homeActivity = new Intent(getApplicationContext(), HomeActivity.class);
            startActivity(homeActivity);
            finish();
        }
        return super.onOptionsItemSelected(item);
    }


}

【问题讨论】:

  • 你可以将url定义为一个全局变量,和你的adapter一样。然后只要触发onDataChange就更新它的值
  • url 根本没有在您的代码中全局定义。请在全球范围内声明
  • list.get(position) 将返回被点击项目的Event 对象。所以,如果Even 不包含url,尽管你应该创建List&lt;DataSnapshot&gt;

标签: android global-variables pass-by-reference


【解决方案1】:

你可以这样做,

public class CominSoonActivity extends AppCompatActivity implements RecyclerViewClickItemInterface {

    DatabaseReference reference;
    RecyclerView recyclerView;
    ArrayList<Event> list;
    MyAdapter adapter;
    String url;

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

        recyclerView = findViewById(R.id.myRecycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        list = new ArrayList<Event>();

        adapter = new MyAdapter(CominSoonActivity.this, list, this);
        recyclerView.setAdapter(adapter);

        reference = FirebaseDatabase.getInstance().getReference().child("EventDisplay");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren())
                {
                    Event e = dataSnapshot1.getValue(Event.class);
                    url = (String) dataSnapshot1.child("website").getValue();
                    list.add(e);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(CominSoonActivity.this, "Opps.... Something went wrong", Toast.LENGTH_SHORT).show();

            }
        });

        //add back button
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

    }

    @Override
    public void onItemClick(int position) {
        //Uri uri = Uri.parse("http://fareezdanial19.wixsite.com/merlimaulibrary");
        if(!url.isEmpty()){
            Uri uri = Uri.parse(url);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        }
    }

    //taking the user back to the previous activity
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == android.R.id.home) {

            Intent homeActivity = new Intent(getApplicationContext(), HomeActivity.class);
            startActivity(homeActivity);
            finish();
        }
        return super.onOptionsItemSelected(item);
    }


}

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2012-02-21
    • 2023-02-21
    • 2013-06-24
    相关资源
    最近更新 更多