为什么findViewById(R.id.wv1)返回null值

时间:2014-07-02 09:22:33

标签: android

我尝试在WebView中加载一些网址(基于导航栏中用户选择的菜单) 我在onCreate上使用默认URL,但是当我尝试根据用户secetion加载另一个url时,我的webview实例返回null:

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    /*FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
            .commit();*/
    /*Toast.makeText(this, String.valueOf(position),Toast.LENGTH_LONG).show();*/

    mainBrowser = (WebView) findViewById(R.id.wv1);
    switch(position) {
        case 0:
            mainBrowser.loadUrl("http://helpdesk.mydomain.net");
            break;
        case 1:
            mainBrowser.loadUrl("http://attendance.mydomain.net");
            break;
        case 2:
            mainBrowser.loadUrl("http://etime.mydomain.net");
            break;
        case 3:
            mainBrowser.loadUrl("http://mydomain.net");
            break;
    }
}

2 个答案:

答案 0 :(得分:0)

如果您分别在ViewonCreate onCreateViewActivity中获得Fragment引用,并将其作为全局变量范围,那么这是一个好习惯ActivityFragment

尝试将WebView引用转移到活动的onCreate(假设您正在使用活动)。

public class MyActivity extends Activity {
WebView mainBrowser;
public void onCreate(Bundle savedInstanceState){
 super.onCreate(savedInstanceState);
 setContentView(R.layout.mylayout);
 mainBrower = (WebView)findViewById(R.id.wv1);
}

public void onNavigationDrawerItemSelected(int position) {
 switch(position) {
    case 0:
        mainBrowser.loadUrl("http://helpdesk.mydomain.net");
        break;
    case 1:
        mainBrowser.loadUrl("http://attendance.mydomain.net");
        break;
    case 2:
        mainBrowser.loadUrl("http://etime.mydomain.net");
        break;
    case 3:
        mainBrowser.loadUrl("http://mydomain.net");
        break;
  }
 }
}

答案 1 :(得分:0)

我找到了解决方案。 mainBrowser为null因为导航抽屉片段在创建之前运行所以我将代码更改为下面并解决了问题。

活动代码:

public class MyActivity extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks {


private NavigationDrawerFragment mNavigationDrawerFragment;

private CharSequence mTitle;
WebView mainBrowser ;
WebView browser ;

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

    mNavigationDrawerFragment = (NavigationDrawerFragment)
            getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
    mTitle = getTitle();

mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
        (DrawerLayout) findViewById(R.id.drawer_layout));

mainBrowser = (WebView) findViewById(R.id.wv1);
mainBrowser.loadUrl("http://attendance.domain.net");
}

@Override
public void onNavigationDrawerItemSelected(int position) {
if(mainBrowser  == null)
{
    //Toast.makeText(this, "IsNull",Toast.LENGTH_LONG).show();
    return;
}
    mainBrowser = (WebView) findViewById(R.id.wv1);
    switch(position) {
        case 0:
            mainBrowser.loadUrl("http://helpdesk.domain.net");
            break;
        case 1:
            mainBrowser.loadUrl("http://attendance.domain.net");
            break;
        case 2:
            mainBrowser.loadUrl("http://etime.domain.net");
            break;
        case 3:
            mainBrowser.loadUrl("http://domain.net");
            break;
    }
}