2016-02-20 2 views
2

У меня возникла проблема с получением идентификатора макета.Поиск по ID

splash.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/splash_img1" > 

</LinearLayout> 

.java файл

@Override 
protected void onCreate(Bundle savedStateInstance) { 
    super.onCreate(savedStateInstance); 
    setContentView(R.layout.splash); 

    int imgId[] = new int[] { R.drawable.splash_img1, R.drawable.splash_img2 }; 
    Random random = new Random(); 
    int result = random.nextInt(imgId.length); 
    LinearLayout layout = (LinearLayout) findViewById(R.layout.splash); 
    layout.setBackgroundDrawable(getResources().getDrawable(imgId[result])); 

} 

Всякий раз, когда я запускаю это, я получаю Gradle построить ошибку "неопределенная макета".

+1

Вы можете найти только вид на Id, если вы установили Идентификатор в xml в первую очередь. используя 'R.layout.xxx', возвращает XML-файл макета в целом, вместо него используйте' R.id.xxx', который возвращает идентификатор интересующего элемента/представления в файле макета (следовательно, 'findViewById') –

ответ

2

вы можете получить layout по R.id.layout_id.

добавить идентификатор к вашему layout файлу

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/splash_layout" // <-- this to your code. 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/splash_img1" > 

</LinearLayout> 

добавить это в файл .java

@Override 
protected void onCreate(Bundle savedStateInstance) { 
    super.onCreate(savedStateInstance); 
    setContentView(R.layout.splash); 

    int imgId[] = new int[] { R.drawable.splash_img1, R.drawable.splash_img2 }; 
    Random random = new Random(); 
    int result = random.nextInt(imgId.length); 

    // edit this part. 
    LinearLayout layout = (LinearLayout) findViewById(R.id.splash_layout); 
    layout.setBackgroundDrawable(getResources().getDrawable(imgId[result])); 

Надеется, что это помогает :)

+0

Doesn ' t android: id = "@ + id/splash_layout" конфликт с setContentView (R.layout.splash); т.е. если последний будет установленContentView (R.layout.splash_layout); – MikeT

+1

@MikeT View IDs хранятся отдельно/по-разному от имен/идентификаторов файла макета. Итак, нет, это не противоречит. –

+0

продажа работа мат. спасибо за информацию, борется с этим часами –

Смежные вопросы