2015-12-03 65 views
2

我下面這個教程:Android Material Design Using Tabs無法解析findViewByID在AppCompatActivity

相關信息:

  • 的Android API等級21
  • 依賴條件被添加到graddle文件 編譯「com.android.support: appcompat-v7:23.0.1'和 compile'c​​om.android.support:design:23.0.1' }

「findViewById」方法無法解析。我試圖按照這個答案Cannot resolve method 'findViewById(int)' in Fragment,但這個AppCompatActivity使用OnCreateBundle而不是OnCreateView,然後我無法獲得視圖對象...

這段代碼有什麼問題?我錯過了一些導入?

package info.androidhive.materialtabs.activity; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import java.util.ArrayList; 
import java.util.List; 

import info.androidhive.materialtabs.R; 
import info.androidhive.materialtabs.fragments.OneFragment; 
import info.androidhive.materialtabs.fragments.ThreeFragment; 
import info.androidhive.materialtabs.fragments.TwoFragment; 

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

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

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new OneFragment(), "ONE"); 
     adapter.addFragment(new TwoFragment(), "TWO"); 
     adapter.addFragment(new ThreeFragment(), "THREE"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

這是「錯誤」的是Android Studio中顯示,但我得到0誤差修改在LOGEVENT窗口

"Error"

+0

請張貼錯誤日誌。 –

+0

也許你忘了「android:id =」@ + id/myID「int」activity_main.xml「文件 – MeGoodGuy

+0

@MeGoodGuy是正確的。我自己的AppCompatActivity在onCreateView()方面工作正常,所以你可能忘了」@ + id/yourID「 –

回答

7

你似乎是運行到Android Studio中的腐敗緩存錯誤。

使用自定義命名空間添加自定義視圖時,會發生這種情況。如果您添加了任何自定義視圖,這可能是您的問題。

要解決:文件>的Invalidate緩存/重啓

這應該重新索引一切,並允許自動完成工作,還有,你findViewById()應該工作。我查看了代碼並沒有看到任何錯誤。

+0

它沒有工作...我的應用程序運行在模擬器上,但沒有渲染「預覽」窗口 – Rieth

+0

這工作得很好,我已經導入一個來自舊的android studio的項目,並且解決了這個問題 – Manny265

1

AppCompatActivity擴展了FragmentActivity,它擴展了具有findViewById()方法的Activity。

所以它不應該是一個問題得到的方法。

我相信這是IDE錯誤。 嘗試關閉您的IDE並重新打開該項目。 完美地爲我工作。

0

嘗試所有解決方案後,將您的構建工具版本更新到最新版本27.0.3,這對我來說非常有用。

在應用

- >的build.gradle

buildToolsVersion '27.0.3' 

重建,希望它爲你工作太

相關問題