android使用Views

时间:2014-02-08 11:04:15

标签: android view

在我的活动中,我有以下观点

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测试;成为一个字符串

有什么建议吗?

编辑:让我更容易理解我的问题

2 个答案:

答案 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)

请您清楚说明您的问题吗?目前,您的语言非常模糊,我无法弄清楚,到底您在寻找什么。它将帮助我们了解您的问题,并反过来解决它。