2017-05-19 3 views
0

나는 활동 중 일부 사용자 정의 View에서 작업 해 왔습니다. 이제 해당 활동에 EditText이 있다고 가정 해 봅시다. 그리고 난 ViewView 내가 그 View (이는 내가 onTouch 방법에서 수행하려는 것을 의미합니다)을 만지면 EditText에있는 값을 얻고 싶습니다. 문제는, 나는 분리 된 클래스의 나의 커스텀 View에 대해 연구 해왔다. 그리고 나는 그것을 끝내는 길을 찾을 수 없다. 나는 처음에 findViewbyId 메서드를 사용하여 ID를 얻으려고 생각했지만 실행 취소 할 수있는 것처럼 보입니다. 그래서, 어떤 도움이나 아이디어도 크게 감사드립니다. 여기 EditText에서 사용자 정의보기로 문자열을 가져 오는 방법

내 프로젝트에 대한 몇 가지 코드입니다 :

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> 

내 사용자 정의보기 자바 파일 :

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; 
    } 

내 활동 자바 파일 :

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

'sdk.findViewById (R.id.line_input) '에 의해 작동해야합니다. – cYrixmorten

+0

'Nono'에 대한 레이아웃은 무엇입니까? –

+1

@cYrixmorten 해결되었습니다. 그것 참 부끄럽 네. 나는 R.id를 여기서도 사용하지 않을 생각이다. 하지만 왜 R을 사용할 수 있는지 말해 주실 수 있습니까? R에이 패키지의 모든 ID가 포함되어 있습니까? 나는 안드로이드에 아주 익숙하다. 그래서 나는 R이 지역적으로 사용되고 있다고 생각하고 있었다. – SnackerH

답변

0

고마워요. o 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을 반환합니다. 그래서 CustomView 내에서 findViewById을 직접 사용하지 않고 외부 메소드를 구현하여 ID를 얻는 것처럼 보입니다.