2014-02-08 21 views
0

在我的活動Android的工作,我有以下幾點看法與視圖

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 

但它不工作,它要我查看測試轉換;換成字符串

有什麼建議嗎?

編輯:可以更容易瞭解我的問題

回答

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 
+0

非常感謝。除了我不能通過v或e到我的onFocusChangeListener ...任何方式做到這一點? –

+0

你是什麼意思通過? –

+0

沒關係,它要求在監聽器裏最終的變數,我也不得不加上強制轉換爲TextView的和EditText上的set和get文本。現在排序它感謝您的幫助 –

0

請你清楚地說明問題了嗎?目前,您的語言非常模糊,我無法弄清楚,您究竟在尋找什麼。它會幫助我們瞭解你的問題,並反過來解決它。

+0

道歉,我現在已經修改,使其更簡單 –

+0

這個答案應該是評論,而不是答案。 –

+1

@ nr4bt目前,我沒有足夠的權限評論這個問題(至少需要聲望50)。所以這是唯一的選擇作爲回答評論。而且,目標是解決這個問題。所以,我希望你會考慮把投票撤回到我的答案。 – Niranjan