Проект домашнего экрана Android, RuntimeException - PullRequest
0 голосов
/ 28 декабря 2010

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

java.lang.RuntimeException:
Unable to instantiate activity ComponentInfo{com.matthieu.launcher/
com.matthieu.launcher.DragableSpace}:
java.lang.InstantiationException: com.matthieu.launcher.DragableSpace

Вот полный журнал: http://pastebin.com/iYtYW2W6

Код прямо из программы запуска Android.

DragableSpace : http://pastebin.com/jpWDtFPF

MainActivity

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DragableSpace space = new DragableSpace(this.getApplicationContext());
        setContentView(space);
    }
}

attr.xml в папке значений:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="DragableSpace">
        <attr name="default_screen" format="integer"/>
    </declare-styleable>
</resources>

Три XML-файла initial_screen , left_screen и right_screen , все имеют одинаковый код, кроме id:

<LinearLayout android:id="@+id/center"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">
</LinearLayout>

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.matthieu.launcher"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

Есть идеи, как это исправить?

Ответы [ 3 ]

1 голос
/ 03 января 2011

Быстро взглянул на код, как сейчас. NullPointerException в строке 169 DragableSpace из-за отсутствия дочернего представления - исправьте это, добавив дочернее представление в MainActivity:

TextView child = new TextView(this);        
    child.setText("This is a Test");
    space.addView(child);

Итак, теперь код запускается и регистрирует сенсорные события в LogCat, но, похоже, ничего не происходит (я предполагаю, что вы хотите 3 пробела, которые можно перетаскивать и перемещать на экране) - некоторые начальные проблемы, я думаю, значение SNAP_VELOCITY мне кажется, что для некоторых жестов перетаскивания значение немного выше, ни один из XML-файлов макета, по-видимому, не используется, и если текущий «экран» соответствует полной ширине и высоте устройства, куда его перетаскивают?

Обновлено: добавьте XML-макет предыдущего сообщения в качестве main.xml:

<?xml version="1.0" encoding="utf-8"?>

Теперь в MainActivity установите содержимое как:

setContentView(R.layout.main);

Кроме того, чтобы было легче увидеть, что происходит, я установил разные цвета фона - добавьте следующие цвета в файл strings.xml:

<color name="green">#21d081</color>
<color name="blue">#00A0FF</color>
<color name="orange">#EA6700</color>

И отредактируйте XML-файлы на экране, чтобы добавить цвет, например. в файле left_screen.xml добавьте следующий атрибут:

android:background="@color/blue"

И используйте другой цвет для initial_screen.xml и right_screen.xml, и когда вы запускаете проект, вы можете перетаскивать экран и открывать новую область.

alt text

1 голос
/ 03 января 2011

С другой стороны, и это больше наблюдение, в вашем коде DragableSpace я заметил две вещи:

  1. В общедоступном DragableSpace (Контекст контекста, атрибуты AttributeSet attrs) {... вы не вызывали a.recycle ();после того, как вы получили доступ ко всем вашим свойствам receiveStyledAttributes.Это плохо, я думаю.

  2. Я не совсем уверен, так как я только что поднял Java, но я обнаружил, что мне пришлось изменить super.DragableSpace (...)к этому. DragableSpace (...).Это могло относиться только к моему компоненту, но я не был полностью уверен, правильно это или нет.

0 голосов
/ 28 декабря 2010

DragableSpace является ViewGroup. DragableSpace не является Activity. Домашние экраны - это мероприятия. Следовательно, DragableSpace не может быть домашним экраном.

...