如何从EditText到自定义视图获取字符串

时间:2017-05-19 17:21:01

标签: java android android-custom-view

我一直在活动中处理一些自定义View。现在让我们说我们在该活动中也有EditText。当我触摸View时,我希望自定义EditText获取View中的值(这意味着我希望在onTouch方法中完成此操作)。问题是,我一直在单独的班级View上工作,我找不到办法让它完成。我最初想过使用findViewbyId方法来获取id,但它似乎是可以撤销的。因此,非常感谢任何帮助或想法。

以下是我项目的一些代码:

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_nono"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="snacker.nonogramsolver.NonoActivity">

    <snacker.nonogramsolver.Nono /* MY CUSTOM VIEW */
        android:id="@+id/NonoView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

        ... /*some elements are here, not important for this question*/

    <EditText
        android:id="@+id/line_input"
        android:layout_width="200dp"
        android:layout_height="wrap_content" />
</LinearLayout>

我的自定义View java文件:

package snacker.nonogramsolver;

import ...;

public class Nono extends View implements View.OnTouchListener{
... /* some variables */

    public Nono(){
        super(null);
    };

    public Nono(Context context){
        super(context);
        //initializeBoard(10,10);
        mCellWidth = mCellHeight = this.getWidth() / (mWidth);
    }

    public Nono(Context context, AttributeSet attrs){
        super(context, attrs);
        ...}

    ... /* SOME CODES ARE HERE, NOT IMPORTANT FOR THIS QUESTION */

    public boolean onTouch(View v, MotionEvent event){
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            mXNow = getCol(event.getX());
            mYNow = getRow(event.getY());
            if(mYNow == -1 && mXNow != -1){
                /* THIS IS WHERE I WANT THIS METHOD TO GET VALUE FROM EDITTEXT */
            }
            invalidate();
            return true;
        }
        return false;
    }

和我的Activity java文件:

public class NonoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ;

        setContentView(R.layout.activity_nono);
        Intent intent = getIntent();
        int width = intent.getIntExtra("width", 5);
        int height = intent.getIntExtra("height", 5);

        Button btn = (Button)findViewById(R.id.btn_clear);
        Nono sdk = (Nono)findViewById(R.id.NonoView);



        sdk.setOnTouchListener(sdk);
        sdk.initializeBoard(width,height);
        btn.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v){
                Nono sdk = (Nono)findViewById(R.id.NonoView);
                sdk.initializeBoard(sdk.mWidth,sdk.mHeight);
            }
        });

    }
}

1 个答案:

答案 0 :(得分:0)

感谢cYrixmorten。

我可以使用findViewById(R.id.line_input)方法。我没想过在这里使用R.id

因此,我的代码应该是这样的:

public boolean onTouch(View v, MotionEvent event){
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            mXNow = getCol(event.getX());
            mYNow = getRow(event.getY());
            if(mYNow == -1 && mXNow != -1){
                EditText sdk = (EditText)findViewById(R.id.line_input);
                String linetext = sdk.getText().toString();
                /* continue my work */
            }
            invalidate();
            return true;
        }
        return false;
    }

再一次,我表示感谢。

编辑:当使用兄弟视图的id调用时,似乎findViewById返回null。所以看起来我必须实现外部方法来获取id,而不是直接在findViewById中使用CustomView