Android-加载活动时访问ListView项

Android-加载活动时访问ListView项,android,listview,Android,Listview,我有一个列表视图中填充了relativelayouts,它们本身就有控件。问题是,在活动UI完全加载之前,我无法访问这些项目(我得到一个空指针异常。没有OnActivityLoaded()方法,下面是我尝试执行的操作: 正在尝试从OnStart()和OnResume()访问 我有一个自定义的适配器,但是我需要使用一些函数 都是主要活动,所以这是不可能的 使用处理程序.postDelayed在给定数量的 时间。这在高端设备上有效,但在低端设备上会延迟 加载时间不够(即使我将其设置为1000) ms

我有一个
列表视图
中填充了
relativelayouts
,它们本身就有控件。问题是,在活动UI完全加载之前,我无法访问这些项目(我得到一个
空指针异常
。没有
OnActivityLoaded()
方法,下面是我尝试执行的操作:

  • 正在尝试从
    OnStart()
    OnResume()
    访问
  • 我有一个自定义的
    适配器
    ,但是我需要使用一些函数 都是主要活动,所以这是不可能的
  • 使用
    处理程序.postDelayed
    在给定数量的 时间。这在高端设备上有效,但在低端设备上会延迟 加载时间不够(即使我将其设置为1000) ms)所以我仍然得到
    空指针异常
  • 因此,我需要一种更好、正确的方式从主活动访问这些小部件

    有什么想法吗?有没有办法知道UI何时完全显示

    编辑:这是我的代码,我需要在加载活动后访问这些代码

                        // These 4 widgets are ones from the relativelayout which is an item in the listview
                        homeSemester = (Spinner) findViewById(R.id.home_profile_semester);
                        homeSpecialty = (Spinner) findViewById(R.id.home_profile_specialty);
                        homefbPP = (ProfilePictureView) findViewById(R.id.home_profile_fbPP);
                        homefbName = (TextView) findViewById(R.id.home_profile_fbName);
    
                        // On click listeners
                        homeSemester.setOnItemSelectedListener(new OnItemSelectedListener()
                        {
                            @Override
                            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                                        // These functions need to be in the main activity (have access to widgets, savedInstance bundles and shared preferences
                                // Configure specialty
                                configSpecialty();
                                // Load Schedule
                                loadSchedule();
                                // Refresh contact list
                                loadContacts();
                                configurePush();
                            }
    
                            @Override
                            public void onNothingSelected(AdapterView<?> arg0) {
                                Toast.makeText(getApplication(), "Please select your Semester!", Toast.LENGTH_SHORT).show();
                                Log.e("Initialization", "No semester selected! This should not happen!");
                            }
                        });
    
                        homeSpecialty.setOnItemSelectedListener(new OnItemSelectedListener()
                        {
                            @Override
                            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
                                // Load schedule
                                loadSchedule();
                                // Refresh contact list
                                loadContacts();
                                // Save Data
                                saveData();
                                configurePush();
                            }
    
                            @Override
                            public void onNothingSelected(AdapterView<?> arg0) {
                                Log.e("Initialization", "No specialty selected! This should not happen!");
                            }
                        });
    
                        // All of these depend on homesemester and homespecialty
                        // Read data
                        readSemester();         
                        readSpecialty();
    
                        // Show all button
                        contactAll.setOnClickListener(new OnClickListener()
                        {
                            public void onClick(View v) { 
                                if(contactAll.isChecked())
                                    loadAll();
                                else
                                    loadContacts();
                            }
                        });
    
                        if(contactAll.isChecked())
                            loadAll();
                        else
                            loadContacts();
    
                        loadSchedule();
    
                        if (sharedPref.getInt("LoggedIn", 0) == 0)
                        {    
                            // Actions taken on buttons click
                            fbLogin.setOnClickListener(new OnClickListener() 
                            {
                                public void onClick(View v) { 
                                    if (fbLogin.getText().toString().equals("Log in with Facebook"))
                                    {
                                        // Welcome Message
                                        ab.setSubtitle("Logging in...");
    
                                        // Login to Facebook
                                        NetAvailable = isNetworkAvailable();
                                        if (NetAvailable)
                                        {
                                            logIn(); 
                                        }
                                        else
                                        {
                                            ab.setSubtitle("No Internet Connection!");
                                        }
    
                                        editor.putInt("LoggedIn", 1);
                                        editor.commit();
                                    } 
                                    else
                                    {
                                        // Log Out
                                        AlertDialog.Builder builderfb = new AlertDialog.Builder(Launch.this);
                                        builderfb.setTitle("Log Out")
                                        .setMessage("Are you sure do you want to Log Out?\n\nNote: Logging out from Facebook will close the application. Next time you start ULFG2 App2Date, you will be prompted to Log in manually.")
                                        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog, int id) {                                               
                                                editor.putInt("LoggedIn", 0);
                                                editor.commit();
                                                finish();
                                            }
                                        });
                                        AlertDialog welcomeMsg = builderfb.create();
                                        welcomeMsg.show();
                                    }
                                }
                            });
                        }
                        else
                        {
                            fbLogin.setOnClickListener(new OnClickListener() 
                            {
                                public void onClick(View v) { 
                                    // Log Out only is needed
                                    AlertDialog.Builder builderfb = new AlertDialog.Builder(Launch.this);
                                    builderfb.setTitle("Log Out")
                                    .setMessage("Are you sure do you want to Log Out?\n\nNote: Logging out from Facebook will close the application. Next time you start ULFG2 App2Date, you will be prompted to Log in manually.")
                                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int id) {                                               
                                            editor.putInt("LoggedIn", 0);
                                            editor.commit();
                                            finish();
                                        }
                                    });
                                    AlertDialog welcomeMsg = builderfb.create();
                                    welcomeMsg.show();
                                }
                            });
                        }
                        homefbName.setText(sharedPref.getString("student_name", "Student"));
                        homefbPP.setProfileId(sharedPref.getString("student_id", ""));
                    }
    

    如果调用代码的第一行(在编辑下),我将在
    onCreate()
    中得到
    null指针异常

    也发布您的代码。您必须显示您为listview、适配器和堆栈跟踪尝试的代码,从中可以获得空指针异常。setContentView在哪里?在
    onCreate()
    @Override public void onCreate(最终捆绑包savedInstanceState){super.onCreate的第一个开头(savedInstanceState);setContentView(R.layout.activity_launch);…}
                ab = getSupportActionBar();
                ab.setTitle("App2Date");
                abDL = (DrawerLayout) findViewById(R.id.MainLayout);
                abLV = (ListView) findViewById(R.id.list_slidermenu);
    
                LayoutInflater mInflater = (LayoutInflater) getApplicationContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                navDrawerItems = new ArrayList<View>();
                navDrawerItems.add(mInflater.inflate(R.layout.drawer_profile, null));
                adapter = new NDListAdapter(getApplicationContext(), navDrawerItems);
                abLV.setAdapter(adapter);
                abLV.setDivider(null);
                abLV.setDividerHeight(0);
                // setting the nav drawer list adapter
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                getSupportActionBar().setHomeButtonEnabled(true);
                getSupportActionBar().setDisplayShowHomeEnabled(true);
    
                abDT = new ActionBarDrawerToggle(this, abDL,
                        R.drawable.ic_navigation_drawer,
                        R.string.drawer_open,
                        R.string.drawer_close) 
                {
                    public void onDrawerClosed(View view) {
                        getSupportActionBar().setTitle(R.string.drawer_close);
                    }
                    public void onDrawerOpened(View drawerView) {
                        getSupportActionBar().setTitle(R.string.drawer_open);
                    }
                };
    
                abDL.setDrawerListener(abDT);
                abDT.setDrawerIndicatorEnabled(true);