Можно установить текст «TextView» из класса «extends View» - PullRequest
0 голосов
/ 23 августа 2011

Я вставил пользовательский вид с именем «disgno» в макет XML:

<?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="?windowsBackground">
    <it.package.myapp.Disegno
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:id="@+id/finestraDisegno"
       android:isScrollContainer="true" />
    <FrameLayout
       android:layout_height="0dp"
       android:layout_width="0dp"
       ...
    <EditText
       ...
       android:id="@+id/et_MOD_x">
       </EditText>

Затем я реализовал класс View extends для заполнения пользовательского макета:

package it.package.myapp;
import android.content.Context;
...
public class Disegno extends View {
    public Disegno(Context context) { 
            this(context, null, 0); }
    public Disegno(Context context, AttributeSet attrs) {
            this(context, attrs, 0);    
            setContentView(R.layout.main);  }
    public Disegno(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
            init(attrs);    }
    ...
    @Override
    protected void onDraw(Canvas canvas) {
            paint.setStyle(Paint.Style.FILL);
            paint.setAntiAlias(true);
            canvas.translate(mPosX, mPosY);
            canvas.scale(mScaleFactor, mScaleFactor);
            // chiamo routine assi cartesiani
            AssiCartesiani(canvas);
            // chiamo routine polilinea
            Polilinea(canvas); }
    ...

Теперь я хотел бы установить текст textView «et_MOD_x» с помощью «findViewById (R.Id.et_MOD_x)», изменив код следующим образом:

@Override
protected void onDraw(Canvas canvas) {
            paint.setStyle(Paint.Style.FILL);
            paint.setAntiAlias(true);
            canvas.translate(mPosX, mPosY);
            canvas.scale(mScaleFactor, mScaleFactor);
            // chiamo routine assi cartesiani
            AssiCartesiani(canvas);
            // chiamo routine polilinea
            Polilinea(canvas);

            EditText et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x)
            et_MOD_x.setText("abcd");

            }

, но без «setContentView (...)" это невозможно!Суммирование: я хотел бы установить текст «EditText» из класса «extends View».Я бы указал на внешний макет ... ммм! Есть ли способ сделать это?!

Ответы [ 2 ]

1 голос
/ 23 августа 2011

есть ссылка в вашем пользовательском представлении

public class Disegno extends View {
    private TextView textView;

    public void setTextView(TextView tv){
        textview = tv;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        textview.setText("Your text here!") 
    }

}

в вашем Activity.onCreate ()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.setContentView(R.layout.my_layout);

    EditText et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x);
    Disegno finestraDisegno = (Disegno)findViewById(R.Id.finestraDisegno);
    finestraDisegno.setTextView(et_MOD_x) ;


}
0 голосов
/ 23 августа 2011

Может быть, это не правильный путь, но вы можете:

Get your editText in your activity and declare it as static.

public static EditText et_MOD_x;
et_MOD_x = (EditText) findViewById(R.Id.et_MOD_x)

и в вашем классе View установите текст:

YourActivity.et_MOD_x.setText("abcd");

Надеюсь, это поможет ..

...