【问题标题】:error: cannot find symbol method findViewById(int) [duplicate]错误:找不到符号方法 findViewById(int) [重复]
【发布时间】: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)

【问题讨论】:

标签: android


【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 2018-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        相关资源
        最近更新 更多