Я пытаюсь настроить вид с фоновым изображением и ползунком - PullRequest
2 голосов
/ 06 декабря 2011

Я также хочу иметь возможность программно изменять изображение, чтобы я мог прикрепить слушателя и изменить изображение в определенных точках. Я нахожусь на ранних стадиях этого, и у меня возникают проблемы с настройкой моего представления;

//inside my activity

LinearLayout mLayout;

//then inside the oncreate

mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout);
mLayout.setBackgroundResource(R.drawable.pic);

Это хорошо компилируется в затмении, но когда я запускаю его, приложение не запускается.

Я хочу создать слайд-шоу с музыкой.

Я испробовал приведенные ниже решения, но все еще получаю сообщение об ошибке;

12-06 11: 51: 11.656: E / AndroidRuntime (238): необработанный обработчик: выход из основного потока из-за необработанного исключения

В конечном итоге я хочу показ слайдов, который позволит мне программно установить фоновое изображение, поэтому я пытаюсь получить представление о представлении, чтобы я мог установить фон с помощью слушателя.

Я настроил вид Рез / макет / slider.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main2"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <SeekBar android:id="@+id/seek"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" />

    <TextView android:id="@+id/progress"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/tracking"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

SeekBar mSeekBar;
TextView mProgressText;
TextView mTrackingText;
LinearLayout mLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSeekBar = (SeekBar)findViewById(R.id.seek);
    mSeekBar.setOnSeekBarChangeListener(this);
    mProgressText = (TextView)findViewById(R.id.progress);
    mTrackingText = (TextView)findViewById(R.id.tracking);


    setContentView(R.layout.slider);
    mLayout = (LinearLayout) findViewById(R.id.main2);
    setContentView(mLayout);
    mLayout.setBackgroundResource(R.drawable.mumbai);

    }

    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
            mProgressText.setText(progress + " " +
                    getString(R.string.seekbar_from_touch) + "=" + fromTouch);
            //mLayout = (LinearLayout) findViewById(R.id.main1);
            //mLayout.setBackgroundResource(R.drawable.boats);
    }

        public void onStartTrackingTouch(SeekBar seekBar) {
            mTrackingText.setText(getString(R.string.seekbar_tracking_on));
        }

        public void onStopTrackingTouch(SeekBar seekBar) {
            mTrackingText.setText(getString(R.string.seekbar_tracking_off));
        }
}

Привет, Pratick, как я написал ниже, я все еще получаю ошибку.

12-06 13: 02: 34.074: E / AndroidRuntime (808): необработанный обработчик: выход из основного потока из-за необработанного исключения

Хотя я не думаю, что это очень информативно. Это было после того, как я закомментировал второй вызов setContentView (mLayout).

Я только что прогнал его через отладчик, и он ошибся в mSeekBar.setOnSeekBarChangeListener (это);

Я не имел успеха с предложениями и попробовал новую тактику Сейчас я пытаюсь использовать LayoutInflater, но на AVD я получаю ту же ошибку, и когда я перебираю код, точно так же, как я думаю, что я собираюсь покинуть строку, которая вызывает 'inflater.inflate', выдает ошибку «источник не найден» и вызывает окно на панели кода отладчика, которое позволяет мне перемещаться. Я создал 2 представления в xml и не получил ошибок при сохранении

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PwdDialogActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LayoutInflater inflater = (LayoutInflater) getSystemService
            (Context.LAYOUT_INFLATER_SERVICE);
        final View layout = inflater.inflate(R.layout.password_dialog,
                (ViewGroup)findViewById(R.id.root));
        //layout.setBackgroundResource(R.drawable.boats);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setView(layout);
        builder.setTitle(R.string.app_name);
    }
}

Мне интересно, не связана ли эта ошибка с предыдущей ошибкой с кодом и больше связана с моей настройкой. Но я создал проект и AVD для запуска в версии 3. Я посмотрел LayoutInflater, и он говорит, что это было с версии 1.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

без установки макета в setContentView() и поиска объекта по его идентификатору, он всегда становится нулевым.

Сначала необходимо установить макет, а затем получить идентификатор объекта из этого макета

setContentView(R.layout.yourlayout); // here set the layout where object or control where defined it
mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout); // and then you can set that object
0 голосов
/ 06 декабря 2011

Изменение

mLayout = (LinearLayout) findViewById(R.id.main1);
setContentView(mLayout);

до

setContentView(R.layout.yourLayoutFile);
mLayout = (LinearLayout) findViewById(R.id.main1);

Причина: findViewById работает с текущим представлением содержимого. До того, как вы настроите представление контента, findViewById всегда будет возвращать ноль. Поэтому вы получите исключение NullPointerException в последней опубликованной вами строке.

...