J'ai travaillé sur certains View
de coutume dans une activité. Maintenant, disons que nous avons aussi EditText
dans cette activité. Et je veux que mon View
personnalisé obtienne la valeur en EditText
quand je touche ce View
(ce qui signifie que je veux que cela soit fait en méthode onTouch
). Le problème est, j'ai travaillé sur mon View
personnalisé sur la classe séparée, et je ne peux pas trouver un moyen d'obtenir ce fait. J'ai d'abord pensé à utiliser la méthode findViewbyId
pour obtenir un identifiant, mais il semble que ce soit possible. Ainsi, toutes les aides ou les idées sont grandement appréciées.comment obtenir la chaîne de EditText à la vue personnalisée
Voici quelques codes pour mon projet:
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>
Ma vue personnalisée fichier 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;
}
et mon fichier java d'activité:
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);
}
});
}
}
Devrait fonctionner avec 'sdk.findViewById (R.id.line_input)' – cYrixmorten
Quelle est votre disposition pour 'Nono'? –
@cYrixmorten résolu. Hum, ceci est embarrassant. Je n'ai pas pensé à utiliser R.id ici aussi. Mais, pouvez-vous me dire pourquoi je peux utiliser R ici aussi? Est-ce que R contient tous les identifiants de ce paquet? Je suis assez nouveau pour Android, donc je pensais que R était utilisé comme local. – SnackerH