错误:找不到符号方法 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) [重复]的主要内容,如果未能解决你的问题,请参考以下文章
错误:找不到符号方法 setContentView(int) [重复]
错误:找不到符号方法 setPreviewDisplay(SurfaceHolder)