0

EditText の拡張として定義したクラスがあります。これを使用して、右揃えのヒントが表示されないという問題を解決します。そこで、ヒントを内部的に実装する独自のコードを作成しました。

特に、getText メソッドをオーバーライドして、値がヒントと等しい場合に null を返すようにします。問題は、 getText がノンストップで呼び出されていることです。再帰的には呼び出されません。そこにカウンターを置いたところ、次の呼び出しを実行する前に、1 つの呼び出しを確実に終了しています。

    @Override
public Editable getText(){
    depth++;
    calls++;
    Log.d("RightJustifiedEditText","getText  - start. Depth =  " + depth + "   calls = " + calls);
    Editable result = (isEmpty?Editable.Factory.getInstance().newEditable(hint):super.getText());
    depth--;
    Log.d("RightJustifiedEditText","getText  - return: " + result + "    Depth = " + depth);
    return result;
}

これを実行すると、「深さ」の値が 1 と表示され、毎回 0 と表示されます。「通話」の価値は上がり続けています。

「super.getText()」を削除してその場所に定数を配置すると、問題ないようです。

デバッグ トレースで確認できることから、レイアウトから呼び出されます。

RightJustifiedEditText.getText() line: 115  
RightJustifiedEditText(EditText).getText() line: 48 
RightJustifiedEditText(TextView).getSelectionStart() line: 5892 
RightJustifiedEditText(TextView).onDraw(Canvas) line: 4057  
RightJustifiedEditText(View).draw(Canvas) line: 6880    
RelativeLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646  
RelativeLayout(ViewGroup).dispatchDraw(Canvas) line: 1373   
TextFieldElement(ViewGroup).drawChild(Canvas, View, long) line: 1644    
TextFieldElement(ViewGroup).dispatchDraw(Canvas) line: 1373 
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644    
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373 
DoctorSearchElement(ViewGroup).drawChild(Canvas, View, long) line: 1644 
DoctorSearchElement(ViewGroup).dispatchDraw(Canvas) line: 1373  
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1644    
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373 
ScrollView(ViewGroup).drawChild(Canvas, View, long) line: 1644  
ScrollView(ViewGroup).dispatchDraw(Canvas) line: 1373   
ScrollView(View).draw(Canvas) line: 6986    
ScrollView(FrameLayout).draw(Canvas) line: 357  
ScrollView.draw(Canvas) line: 1409  
RelativeLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646  
RelativeLayout(ViewGroup).dispatchDraw(Canvas) line: 1373   
RelativeLayout(View).draw(Canvas) line: 6883    
FrameLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646 
FrameLayout(ViewGroup).dispatchDraw(Canvas) line: 1373  
FrameLayout(View).draw(Canvas) line: 6883   
FrameLayout.draw(Canvas) line: 357  
LinearLayout(ViewGroup).drawChild(Canvas, View, long) line: 1646    
LinearLayout(ViewGroup).dispatchDraw(Canvas) line: 1373 
PhoneWindow$DecorView(ViewGroup).drawChild(Canvas, View, long) line: 1644   
PhoneWindow$DecorView(ViewGroup).dispatchDraw(Canvas) line: 1373    
PhoneWindow$DecorView(View).draw(Canvas) line: 6883 
PhoneWindow$DecorView(FrameLayout).draw(Canvas) line: 357   
PhoneWindow$DecorView.draw(Canvas) line: 1862   
ViewRoot.draw(boolean) line: 1522   
ViewRoot.performTraversals() line: 1258 
ViewRoot.handleMessage(Message) line: 1859  
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3683    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 507  
ZygoteInit$MethodAndArgsCaller.run() line: 839  
ZygoteInit.main(String[]) line: 597 
NativeStart.main(String[]) line: not available [native method]  

これは、それを直接含むレイアウトです:

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

<com.applicat.meuchedet.views.RightJustifiedEditText
    android:id="@+id/text_field_element_text_field"
    android:layout_width="170dip"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:textColor="@color/text_field_color"
    android:textSize="14sp"
    android:layout_marginRight="5dip"
    android:paddingLeft="15dip"
    android:paddingRight="15dip"
    android:gravity="right|center_vertical"
    android:inputType="text"
    android:lines="1"
    android:scrollHorizontally="true"
    android:ellipsize="end"
    android:background="@drawable/text_field_bg"
    />
<TextView
    android:id="@+id/text_field_element_prompt"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    android:gravity="center_vertical|right"
    android:layout_centerVertical="true"
    android:textSize="16sp"
    android:singleLine="true"
    />

4

0 に答える 0