错误:找不到符号方法 findViewById(int) [重复]

Posted

技术标签:

【中文标题】错误:找不到符号方法 findViewById(int) [重复]【英文标题】:error: cannot find symbol method findViewById(int) [duplicate] 【发布时间】:2016-11-10 20:41:37 【问题描述】:

这是 fragmentOne.java 包piestudio.opinion;

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.MenuItem;

/**
 * Created by jene on 7/4/2016.
 */
public class FragmentOne extends Fragment
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener()

            public boolean onNavigationItemSelected(MenuItem Item)
              int id = Item.getItemId();

            if( id  == R.id.toi) 
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                FragmentOne FragmentOne = new FragmentOne();
                FragmentManager.beginTransaction()
                        .add(R.id.content_frame,FragmentOne,"Times of India")
                        .commit();
                drawer.closeDrawer(navigationView);
            
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                return true;
            
        );
    

我收到这些错误

错误:(19, 64) 错误: 找不到符号方法 findViewById(int) 错误:(27, 54) 错误:找不到符号方法 findViewById(int) 错误:(29, 32) 错误:无法从静态上下文引用非静态方法 beginTransaction() 错误:(37, 54) 错误:找不到符号方法findViewById(int)

【问题讨论】:

由于此类是片段,因此您的 onCreate 方法中没有布局资源。在您创建视图的 onCreateView 之后创建的布局。下面是片段生命周期。developer.android.com/guide/components/fragments.html#Creating 【参考方案1】:

片段没有方法

findViewById

您需要getView() 并使用该方法。检查这个findViewById in Fragment

所以将行改为:

final NavigationView navigationView = (NavigationView) getView().findViewById(R.id.nav_view);

加上在片段中使用视图应该在片段生命周期的 onCreateView 方法中/之后在膨胀片段的布局之后。

【讨论】:

getView() 可以是null 中的onCreateView()。在这种情况下使用view.findViewById(R.id.nav_view);(其中view = inflater.inflate(...))。【参考方案2】:

你可以这样做:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) 
    super.onViewCreated(view, savedInstanceState);
    View content = view.findViewById(R.id.content);

【讨论】:

【参考方案3】:

下面一行一行一行的修改

第 1 步:

 final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);

到这里

 final NavigationView navigationView = (NavigationView)getView().findViewById(R.id.nav_view);

第 2 步

  DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

到这里

 DrawerLayout drawer = (DrawerLayout)getView().findViewById(R.id.drawer_layout);

第 3 步:

改变这个

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

到这里

DrawerLayout drawer = (DrawerLayout)getView().findViewById(R.id.drawer_layout);

使用getView()。这将返回片段的根视图,您可以调用findViewById()

【讨论】:

【参考方案4】:

这样做,

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.visited_task, null);

 final NavigationView navigationView = (NavigationView) root.findViewById(R.id.nav_view);

return root;

【讨论】:

以上是关于错误:找不到符号方法 findViewById(int) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java 中 “找不到符号”的错误

错误:找不到符号方法 setContentView(int) [重复]

return方法找不到符号[关闭]

错误:找不到符号方法 setPreviewDisplay(SurfaceHolder)

java踩坑-编译错误:FastJson与lombok导致找不到符号:方法getId

当我在此页面中声明方法时,为啥此代码会出现“找不到符号”错误?