2013-07-01 40 views
0

我必須包含在的EditText文本在這樣的ViewHolder:採取從一個EditText文本在ViewHolder的Android

@Override 
      public void onClick(View v) { 

       holder.editTextComment = (EditText) v 
         .findViewById(R.id.editTextComment); 
       String comment = holder.editTextComment.getText() 
         .toString(); 
       // String comment = new String("lol"); 
       Calendar c = Calendar.getInstance(); 
       SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyy"); 
       SimpleDateFormat dt = new SimpleDateFormat("HH:mm"); 
       String formattedDate = df.format(c.getTime()); 
       String formattedTime = dt.format(c.getTime()); 

       if (!comment.equalsIgnoreCase("")) { 
        switch (v.getId()) { 
        case R.id.buttonPostComment: 
         addItem(comment, formattedDate, formattedTime, v, 
           holder); 
         break; 
        } 
       } 

但我的程序崩潰,當我嘗試到的EditText文本插入到一個字符串,爲什麼?

+1

發佈logcat。只要看看你有什麼,我會說你的'editTextComment'是'null'。嘗試從'v.findViewById(...)'中刪除'v' – codeMagic

+0

我想''holder'或者'holder.editTextComment'在調用'getText()'時都是null。 –

+0

http://pastebin.com/5nrtsYuC – hasmet

回答

1

您確定以下代碼返回EditText

(EditText) v.findViewById(R.id.editTextComment); 

我的猜測是,它只是設置holder.editTextCommentnull,因此在做就可以了.getText().toString()渲染NullPointerException

+1

你應該在評論中添加這個內容,並要求操作系統比在這裏進行猜測工作更好的清晰度。 – CRUSADER

+0

我解決了.....如由ninetwozero所說,代碼返回null ,因爲視圖v不正確。感謝ninetwozero和codeMagin – hasmet

+0

@CRUSADER:如果您檢查OP版本,不會猜測。 ;-) – ninetwozero

2

嘗試修改此行

holder.editTextComment = (EditText) v 
        .findViewById(R.id.editTextComment); 

holder.editTextComment = (EditText) findViewById(R.id.editTextComment); 

EditText沒有包含在裏面Button你點擊它是v代表什麼。如果你只用充氣setContentView()然後刪除v應該工作。如果您使用的inflater那麼你可以使用你代替v

充氣無論layout什麼你正在恢復nullholder.editTextComment所以你得到一個NPE當你調用它getText()

+0

我不能因爲這個代碼插入到一個getView中,至少有一個inflater(v) – hasmet

+0

然後改變'inflater' insdie'getView()'的變量。就目前而言,它可能使用'v'作爲由於範圍而被點擊的'View' – codeMagic

相關問題