بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پاسخ ندادن TextView به Listener
سلام خسته نباشید دوستان؛ تو آموزش ساخت بازی Hangman همه ی TextView ها به listener پاسخ میدن ولی txt_j و txt_k پاسخ نمیدن دلیلش چی می تونه باشه ؟؟
همه چیز دقیقاً دقیقاً مثل استاد نوشته شده ( بعد مدتی کار با لیسنر ها میدونم که درست نوشتم)
+1
0
سلام ، چک کنین ببینین اشاره گر هاشون رو درست تعریف کرده باشین و اینکه اون لیسنر کلی رو هم براشون تعریف کرده باشین . ولی بهتره کدتون رو بگزارین اینجا تا دقیق تر بشه گفت. (9 سال پیش)
برای این سوال 2 پاسخ وجود دارد.
مشاهده پاسخ صحیح
پاسخ به سوال
وحید گروسی
9 سال پیش
+1
0
این کد اکتیویتی MainActivity :
package app.developer.hangman_design;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private String wordDashed = "";
private int failCount = 0;
private TextView txt_word;
private ImageView img_face;
private String selectedWord = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// define java pointers to ui elements
img_face = (ImageView) findViewById(R.id.img_face);
txt_word = (TextView) findViewById(R.id.txt_word);
final TextView txt_a = (TextView) findViewById(R.id.txt_a);
final TextView txt_b = (TextView) findViewById(R.id.txt_b);
final TextView txt_c = (TextView) findViewById(R.id.txt_c);
final TextView txt_d = (TextView) findViewById(R.id.txt_d);
final TextView txt_e = (TextView) findViewById(R.id.txt_e);
final TextView txt_f = (TextView) findViewById(R.id.txt_f);
final TextView txt_g = (TextView) findViewById(R.id.txt_g);
final TextView txt_h = (TextView) findViewById(R.id.txt_h);
final TextView txt_i = (TextView) findViewById(R.id.txt_i);
final TextView txt_j = (TextView) findViewById(R.id.txt_j);
final TextView txt_k = (TextView) findViewById(R.id.txt_k);
final TextView txt_l = (TextView) findViewById(R.id.txt_l);
final TextView txt_m = (TextView) findViewById(R.id.txt_m);
final TextView txt_n = (TextView) findViewById(R.id.txt_n);
final TextView txt_o = (TextView) findViewById(R.id.txt_o);
final TextView txt_p = (TextView) findViewById(R.id.txt_p);
final TextView txt_q = (TextView) findViewById(R.id.txt_q);
final TextView txt_r = (TextView) findViewById(R.id.txt_r);
final TextView txt_s = (TextView) findViewById(R.id.txt_s);
final TextView txt_t = (TextView) findViewById(R.id.txt_t);
final TextView txt_u = (TextView) findViewById(R.id.txt_u);
final TextView txt_v = (TextView) findViewById(R.id.txt_v);
final TextView txt_w = (TextView) findViewById(R.id.txt_w);
final TextView txt_x = (TextView) findViewById(R.id.txt_x);
final TextView txt_y = (TextView) findViewById(R.id.txt_y);
final TextView txt_z = (TextView) findViewById(R.id.txt_z);
//Select Word and Convert it to Dashed Version
selectedWord = selectWord();
wordDashed = getDashedWord(selectedWord);
//initialized ui
img_face.setImageResource(R.drawable.face_1);
txt_word.setText(wordDashed);
//Define General Virtual Keyboard Click Listener
View.OnClickListener Listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
processKey(view);
}
};
//assign common Listener to ui virtual keyboard
txt_a.setOnClickListener(Listener);
txt_b.setOnClickListener(Listener);
txt_c.setOnClickListener(Listener);
txt_d.setOnClickListener(Listener);
txt_e.setOnClickListener(Listener);
txt_f.setOnClickListener(Listener);
txt_g.setOnClickListener(Listener);
txt_h.setOnClickListener(Listener);
txt_i.setOnClickListener(Listener);
txt_l.setOnClickListener(Listener);
txt_m.setOnClickListener(Listener);
txt_n.setOnClickListener(Listener);
txt_o.setOnClickListener(Listener);
txt_p.setOnClickListener(Listener);
txt_q.setOnClickListener(Listener);
txt_r.setOnClickListener(Listener);
txt_s.setOnClickListener(Listener);
txt_t.setOnClickListener(Listener);
txt_u.setOnClickListener(Listener);
txt_v.setOnClickListener(Listener);
txt_w.setOnClickListener(Listener);
txt_x.setOnClickListener(Listener);
txt_y.setOnClickListener(Listener);
txt_z.setOnClickListener(Listener);
}
private String selectWord() {
String[] words = {
"Object Oriented",
"Polymorphism",
"Encapsulation",
"Interface",
"Composition",
"Development",
"Research",
"Google",
"Documentation",
};
int randomIndex = (int)(Math.random() * words.length);
return words[randomIndex] ;
}
private String getDashedWord(String word) {
String dashed = "";
for(int i = 0; i < word.length() ; i++) {
if(word.charAt(i) != ' ') {
dashed += "-";
} else {
dashed += " ";
}
}
return dashed;
}
private String getIdAsString(View view) {
String id = view.getResources().getResourceEntryName(view.getId());
return id;
}
public void lostGame() {
Intent intent = new Intent(MainActivity.this, FinishActivity.class);
intent.putExtra("RESULT" , "LOST");
MainActivity.this.startActivity(intent);
finish();
}
public void winGame() {
Intent intent = new Intent(MainActivity.this, FinishActivity.class);
intent.putExtra("RESULT" , "WON");
MainActivity.this.startActivity(intent);
finish();
}
private String replaceChar(String target,int index,char newChar) {
char[] charArray = target.toCharArray();
charArray[index] = newChar;
return new String(charArray);
}
private void processKey(View view) {
TextView textView = (TextView) view;
String id =getIdAsString(textView);
String letter = id.replace("txt_","");
char letterChar = letter.charAt(0);
// Log.i("Test","TextView Clicked " + letter);
String wordLowerCased = selectedWord.toLowerCase();
if(wordLowerCased.contains(letter)) {
// Log.i("Test", " Word Contains " + letter);
for(int i = 0 ; i < wordLowerCased.length(); i++) {
if(wordLowerCased.charAt(i) == letterChar) {
wordDashed = replaceChar(wordDashed,i,selectedWord.charAt(i));
txt_word.setText(wordDashed);
if(!wordDashed.contains("-")) {
winGame();
// Log.i("Test","YOU WON");
}
}
}
} else {
// Log.i("Test", " Word not Contains " + letter);
failCount++;
int imageId = R.drawable.face_1 ;
if(failCount > 7 ) {
img_face.setImageResource( R.drawable.face_9);
lostGame();
// Log.i("Test" , "Game Over");
return;
}
switch (failCount) {
case 1: imageId = R.drawable.face_2; break;
case 2: imageId = R.drawable.face_3; break;
case 3: imageId = R.drawable.face_4; break;
case 4: imageId = R.drawable.face_5; break;
case 5: imageId = R.drawable.face_6; break;
case 6: imageId = R.drawable.face_7; break;
case 7: imageId = R.drawable.face_8; break;
case 8: imageId = R.drawable.face_9; break;
}
img_face.setImageResource(imageId);
}
textView.setVisibility(View.INVISIBLE);
}
}
این کد اکتیویتی MainActivity :
package app.developer.hangman_design;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class FinishActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_finish);
Button btn_exit = (Button) findViewById(R.id.btn_exit);
Button btn_restart = (Button) findViewById(R.id.btn_restart);
btn_exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
btn_restart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FinishActivity.this,MainActivity.class);
FinishActivity.this.startActivity(intent);
finish();
}
});
TextView txt_result = (TextView) findViewById(R.id.txt_result);
Intent intent = getIntent();
String result = intent.getStringExtra("RESULT");
if(result.equals("WON")) {
txt_result.setText("You Won");
} else {
txt_result.setText("Game Over!");
}
}
}
پاسخ به سوال
وحید گروسی
9 سال پیش
+1
0
پاسخ صحیح
پیدا کردم مشکل رو :|
مشکل تو پاس ندادن متغیر listener به txt_j و txt_k بودش
واقعاً که
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .