2013-11-18 3 views
1

Я разрабатываю приложение, в котором все элементы управления настраиваются и добавляются динамически. Я уже могу добавить метку (которая расширяет TextView) и изображение (которое расширяет ImageView). Теперь я пытаюсь добавить текстовое поле (которое должно расширять EditText). Я придерживаюсь той же процедуры, что и для других представлений, ведь исходная настройка такая же, но я продолжаю получать исключение Runtime для EditText: «Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare();»Android EditText vs TextView

Теперь, когда я изменяю этот TextBox для расширения TextView вместо EditText, он работает без проблем. Проблема, по-моему, может заключаться в том, что либо я не могу установить свойство, которое он ожидает от меня (что я не знаю), либо может быть связано с контекстом, который передается из отдельного класса (что также странно, потому что работает с TextView и ImageView). Вот мой Текстовое поле Код:

public class MyCustomTextBoxView extends EditText { 

RelativeLayout.LayoutParams params; 

public MyCustomTextBoxView(Context context){ 
    super(context); 
    setLayout(); 
} 

    //...some other methods here... 

private void setLayout(){ 
    //setting default values 
    setLines(1); 
    params = new RelativeLayout.LayoutParams(DPSHelper.getDPSValue(100), DPSHelper.getDPSValue(30)); 
    setLayoutParams(params); 
} 

Вот мой контекст применения Класс:

public class AppContext extends Application { 

    private static Context appContext; 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     appContext = getApplicationContext(); 
    } 
    public static Context get(){ 
     return appContext; 
    } 
} 

Вот идентификатор, как создать вид из другого класса:

MyCustomTextBoxView view = new MyCustomTextBoxView(AppContext.get()); 

Я пытался исправить его в течение нескольких часов, не знаю, что я делаю неправильно.

файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.shearwater.tabletapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:name="helpers.AppContext" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity /> 
... 
     </activity> 
    </application> 

</manifest> 

Пакеты включают:

import helpers.AppContext; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import models.base.ComponentData; 
import models.components.ImageBoxModel; 
import models.components.SimpleLabelModel; 
import models.components.SingleLineTextBoxModel; 
import models.containers.HubLayoutContainerModel; 
import views.HubLayoutContainerView; 
import views.ImageBoxView; 
import views.SimpleLabelView; 
import views.SingleLineTextBoxView; 
import android.view.View; 
import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.databind.DeserializationFeature; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import controllers.HubLayoutContainerController; 
import controllers.ImageBoxController; 
import controllers.SimpleLabelController; 
import controllers.SingleLineTextBoxController; 
import enums.EControl; 
+0

Добавить сообщение журнала здесь .. –

+1

Попробуйте использовать CallerActivity.this вместо AppContext.get() ... –

+0

Вход сообщение: 11-18 13: 07: 32.194: E/AndroidRuntime (8475): Вызванный: Java .lang.RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare() 11-18 13: 07: 32.194: E/AndroidRuntime (8475): \t на android.os.Handler. (Handler.java:197) 11-18 13: 07: 32.194: E/AndroidRuntime (8475): \t at android.os.Handler. (Handler.java:111) 11-18 13: 07: 32.194: E/AndroidRuntime (8475): \t at android.widget.Editor $ UserDictionaryListener. (Editor.java:3875) 11-18 13: 07: 32.194: E/AndroidRuntime (8475): \t на android.widget.Editor. (Editor.java:193) – etilia

ответ

0

Я думаю, я нашел решение. Проблема заключалась в том, что я создавал все необходимые представления в AsyncTask, прежде чем возвращать их в основное действие для рендеринга. И по какой-то причине я мог создать TextView, но не EditText (который расширяет TextView), а ошибка была при инициализации редактора. Я добавил Looper.prepare() в doInBackground() на данный момент, поскольку он выглядел как лучший вариант того, что мне нужно для достижения.

+0

Вы упоминаете «EditView» как в своем вопросе, так и в своем ответе. Нет такого понятия. Я предполагаю, что вы имеете в виду «EditText»? – RenniePet

+0

@RenniePet, да, это действительно EditText.Спасибо что подметил это. (Изм) – etilia

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