我一直在活动中处理一些自定义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);
}
});
}
}
答案 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
。