Pregunta

También quiero poder cambiar la imagen programáticamente para poder adjuntar un oyente y cambiar la imagen en puntos específicos. Estoy en las primeras etapas de esto y tengo problemas para configurar la vista que tengo;

//inside my activity

LinearLayout mLayout;

//then inside the oncreate

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

Esto compila bien en Eclipse, pero cuando lo ejecuto la aplicación no se inicia.

Estoy buscando crear un espectáculo de diapositivas con música.

He probado las soluciones que se dan a continuación, pero todavía recibo un error;

12-06 11: 51: 11.656: E/AndroidRuntime (238): Handler no capturado: Hilo Main Exiting debido a la excepción no captura

En última instancia, quiero un espectáculo de diapositivas que me permita establecer la imagen de fondo mediante programación para que esté tratando de manejar una vista para poder configurar el fondo a través de un oyente.

He configurado una vista Res/Layout/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));
        }
}

Hola Pratick, como escribí a continuación, sigo recibiendo un error.

12-06 13: 02: 34.074: e/androidruntime (808): manejador no capturado: hilo principal de salida debido a la excepción no captura

Aunque no creo que sea muy informativo. Esto fue después de que comenté la segunda llamada a SetContentView (MLayout).

Acabo de ejecutarlo a través del depurador y está errado en Mseekbar.SetSeEkBarchangeListener (esto);

No tuve éxito con las sugerencias y he probado una nueva táctica, ahora estoy tratando de usar un LayoutInflater, pero recibo el mismo error en el AVD y cuando paso el código justo cuando creo que estoy a punto de irme. La línea que llama 'inflater.inflate' le da el error "fuente no encontrada" y trae una ventana en el panel de código del depurador que me permite navegar. He creado las 2 vistas en XML y no he recibido errros cuando guardé

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);
    }
}

Me pregunto si este error y el error anterior no tienen nada que ver con el código y está más preocupado por mi configuración. Pero he creado el proyecto y AVD para ejecutar en la versión 3. He buscado LayoutInflater y dice que ha sido desde la versión 1.

¿Fue útil?

Solución

sin establecer ningún diseño en setContentView() Y encuentre el objeto por su identificación, siempre se está volviendo nulo.

Primero debe establecer el diseño y luego obtener el ID de objeto de ese diseño

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

Otros consejos

Cambio

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

a

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

Razón: findViewById Funciona en la vista de contenido actual. Antes de haber establecido una vista de contenido findViewById siempre volverá nulo. Por lo tanto, obtendrá una NullPointerException en la última línea que publicó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top