在我的活动中,我有以下观点
TextView player1;
TextView player2;
TextView player3;
TextView player4;
EditText player1name;
EditText player2name;
EditText player3name;
EditText player4name;
每个TextView都有应用onclick侦听器。因此触发了OnClick功能。
当我们进入onClick时,这就是我目前正在做的事情:
@Override
public void onClick(View v) {
//the v variable is the clicked textview, in this case "player1"
//hide the textview and show the resultant edittext
v.setVisibility(View.GONE);
player1name.setVisibility(View.VISIBLE);
//set focus on edit text and when focus is lost hide it and set the textview text
player1name.requestFocus();
imm.showSoftInput(player1name, InputMethodManager.SHOW_FORCED);
player1name.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View y, boolean x) {
v.setVisibility(View.VISIBLE);
player1name.setVisibility(View.GONE);
imm.hideSoftInputFromWindow(player1name.getWindowToken(), 0);
String name = player1name.getText().toString();
if (name.equals("")) {
v.setText("Player Name1");
} else {
v.setText(name);
}
}
});
}
但是使用此解决方案,我需要复制此代码并更改player2的视图名称 - player2name,player3 - player3name等
我显然可以通过v抓取单击的TextView,但我似乎无法抓取其相应的EditText。
我曾想过这样做:View test = v + "name";
//then i replace all references to player1name with the test variable
但它不起作用它要我转换View测试;成为一个字符串
有什么建议吗?
编辑:让我更容易理解我的问题
答案 0 :(得分:1)
View test = v + "name";
会出现编译错误。因为“v”不是字符串类型。而且即使它是String,测试也不是。这条线非常错误。
有几种方法可以达到你想要的效果,
您可以使用hashmap
为hashmap声明一个全局字段
private final HashMap<Integer,EditText> map = new HashMap<Integer,EditText>();
并在onCreate
方法中将textview id作为键,并将edittext变量置于值中。
player1name = (EditText) findViewById(R.id.player1name);
map.put(R.id.textView1, player1name);
// for the rest
onClick
方法中的
EditText e = map.get(v.getId());
然后用“e”替换它们
e.requestFocus(); //example
答案 1 :(得分:0)
请您清楚说明您的问题吗?目前,您的语言非常模糊,我无法弄清楚,到底您在寻找什么。它将帮助我们了解您的问题,并反过来解决它。