2013-10-31 79 views
3

1)我動態地創建了一些控件。我有一箇中等大小的帶有EditText的RelativeLayout,可以填充大部分父視覺空間。其餘部分由另一個視圖覆蓋,佈局應該在點擊時滑動。問題是當用戶點擊EditText時,佈局未收到onClick事件。我無法使用TextView,因爲我需要用戶稍後輸入一些文本。我試過這個代碼,沒有成功Android EditText阻止其父母的OnClickListener

private void addTopView() { 
    RelativeLayout midView = new RelativeLayout(this); 
    ImageView imageView = new ImageView(this); 
    imageView.setImageResource(R.drawable.wallet_top); 
    imageView.setBackgroundColor(0xffff0000); 
    RelativeLayout.LayoutParams lp = new LayoutParams(scale(320), scale(heightTop)); 
    midView.addView(imageView, lp); 
    RelativeLayout topCard = populateTPasses ? addTpass(0) : addCard(0); 
    topCard.setOnClickListener(topCardClick); 
    midView.addView(topCard); 
    lp = new LayoutParams(scale(320), scale(cardTopOffsetY + cardHeight)); 
    lp.topMargin = scale(upperOffset); 
    walletScrollView.addView(midView, lp); 
} 

private RelativeLayout addCard(int indexVal) { 
    String cardName = "Add Credit Card"; 
    String cardNum = "Max 16 digits"; 
    String cardCVC = "Max 6 digits"; 
    boolean switchStatus = NO; 
    String cardExpiry = dateFormatter.format(new Date()); 
    if(indexVal < creditcards.size()) 
    { 
     cardName = creditcards.get(indexVal).name; 
     cardNum = String.format("........%s", creditcards.get(indexVal).display); 
     cardCVC = "NOT STORED"; 
     cardExpiry = creditcards.get(indexVal).expiry; 
     switchStatus = creditcards.get(indexVal).isDefault; 
    } 
    LayoutParams lp = new LayoutParams(scale(cardWidth), scale(cardHeight)); 
    lp.leftMargin = scale(cardTopOffsetX); 
    lp.topMargin = scale(cardTopOffsetY); 
    RelativeLayout layout = new RelativeLayout(this); 
    layout.setLayoutParams(lp); 
    layout.setTag(indexVal); 
    addCardElements(layout, cardName, cardNum, cardExpiry, cardCVC, switchStatus); 
    return layout; 
} 

private ImageView addCardElements(RelativeLayout whichCard, String cardName, String cardNumber, String cardExpiry, String cardCVC, boolean defaultStatus) { 
    whichCard.setBackgroundResource(R.drawable.credit_card_tpay); 

    //Add card name 
    EditText cardNameField = addCardName(cardName); 

    whichCard.addView(cardNameField); 
    return null; 
} 

private EditText addCardName(String cName) { 
    EditText cardName = new EditText(this); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(scale(cardWidth - 90), LayoutParams.WRAP_CONTENT); 
    params.leftMargin = scale(32 + 50); 
    params.topMargin = scale(15); 
    cardName.setBackgroundColor(Color.TRANSPARENT); 
    cardName.setLayoutParams(params); 
    cardName.setTextColor(Color.WHITE); 
    if(isLast == NO || (_selectedIndex >= creditcards.size() && creditcards.size() != 0)) 
     cardName.setText(cName); 
    else 
    { 
     cardName.setHint(cName); 
    } 
    isLast = NO; 
    cardName.setTag(kTag_CardName); 
    if(_selectedIndex >= creditcards.size()) 
     cardName.setEnabled(YES); 
    else { 
     cardName.setEnabled(NO); 
     cardName.setFocusable(NO); 
     cardName.setFocusableInTouchMode(NO); 
     cardName.setClickable(NO); 
     cardName.setBackgroundColor(Color.YELLOW); 
    } 
    cardName.setGravity(5); 
    return cardName; 
} 

2)這個問題解決了。當我的佈局在TranslateAnimation的幫助下向上滑動時,我必須將其從其父視圖中移除並放到另一個ViewGroup上,否則所有用戶輸入都會中斷。然後它隨着父母的類似變化而回退。在這個過程中,我將佈局的OnClickListener設置爲null並返回給我的偵聽器。問題是,在此之後,偵聽器不會觸發,佈局只能滑動一次。我想知道可能會導致這種情況。

+1

更多與聽者的代碼可能會有所幫助。 –

+0

問題2通過在更改佈局父項之前移動調用來取消動畫*來解決。然而,EditText仍然阻止它的父級OnClickListener ... –

回答

0

我的經驗是,點擊EditText不會傳播到它的父級,不像點擊TextView。你必須聽自己的孩子。

-1

你有2個問題:

首先,你需要添加的EditText(到RelativeLayout的)前添加「點擊」的內容。您可以通過首先添加它們或在使用addView時指定index = 0來完成此操作。

第二個問題是在翻譯動畫之後,您需要將佈局參數更改爲目標位置,以便它們可以獲得點擊。您可以使用動畫偵聽器,並在動畫結束時更新可點擊內容的佈局參數到新位置。

我真的不知道,因爲你沒有包括相關的代碼。


您的評論後:

所以你不要,因爲它似乎你點擊視圖上面顯示的動畫後有正確的第一個問題。然而,第二個問題是你擁有的,因爲即使它們出現在它上面,它們的真實位置仍然沒有改變,這就是爲什麼你沒有得到任何觸摸事件。動畫結束後,您需要更新它們的位置(LayoutParams)。

+0

我已經有了動畫監聽器,並且我改變了佈局參數。你能否澄清添加「可點擊」的內容? –

+0

檢查編輯。 –

+1

evetything顯示得很好。問題是點擊監聽器在兩個單獨的條件下不能觸發 –