2012-06-22 16 views
1

我想我在这里做了一些非常基本的错误。我无法编辑由我的列表适配器生成的任何editText字段(文本框显示,我可以将光标放在字段上,但我无法键入/删除任何文本)。这是我的代码。此ListAdapter编辑文本有什么问题?

我ListAdaptor 公共类LoanRepaymentListAdapter扩展ArrayAdapter {

private final List<CurrentRepaymentInstallment> loansForRepayment; 
private final Activity context; 

public LoanRepaymentListAdapter(Activity context, List<CurrentRepaymentInstallment> loansForRepayment) { 
    super(context, R.layout.loan_repayments, loansForRepayment); 
    this.context = context; 
    this.loansForRepayment = loansForRepayment; 
} 

static class ViewHolder { 
    protected TextView borrowerName; 
    protected TextView loanAmount; 
    protected TextView installmentNumber; 
    protected TextView estimatedTotal; 
    protected EditText repaymentAmount; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = null; 
    if (convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.loan_repayments, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.borrowerName = (TextView) view.findViewById(R.id.borrowerName); 
     viewHolder.loanAmount = (TextView) view.findViewById(R.id.loanAmount); 
     viewHolder.installmentNumber = (TextView) view.findViewById(R.id.installmentNumber); 
     viewHolder.estimatedTotal = (TextView) view.findViewById(R.id.estimatedTotal); 
     viewHolder.repaymentAmount = (EditText) view.findViewById(R.id.repaymentAmount); 
     viewHolder.repaymentAmount.setEditableFactory(Editable.Factory.getInstance()); 
     viewHolder.repaymentAmount.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable arg0) { 
       String repaymentAmount = arg0.toString(); 
       loansForRepayment.get(position).setRepaymentAmount(Float.parseFloat(repaymentAmount)); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, 
        int before, int count) { 
       // TODO Auto-generated method stub 

      } 


     }); 
     view.setTag(viewHolder); 
     viewHolder.repaymentAmount.setTag(loansForRepayment.get(position)); 
    } else { 
     view = convertView; 
     ((ViewHolder) view.getTag()).repaymentAmount.setTag(loansForRepayment.get(position)); 
    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.borrowerName.setText(loansForRepayment.get(position).getLoanProfileBasicInfo().getBorrowerBasicInfo().getFirstName()); 
    holder.loanAmount.setText("Rs. " + Float.toString(loansForRepayment.get(position).getLoanProfileBasicInfo().getLoanAmountInPaisa()/100)); 
    holder.estimatedTotal.setText("Rs. " + Float.toString(loansForRepayment.get(position).getEstimatedTotalAmount()/100)); 
    holder.installmentNumber.setText("Inst no - " + Integer.toString(loansForRepayment.get(position).getInstallmentNumber())); 
    float repaymentAmt = loansForRepayment.get(position).getRepaymentAmount(); 
    if(repaymentAmt != 0.0) holder.repaymentAmount.setText(Float.toString(repaymentAmt)); 
    return view; 
} 
} 

我的XML loan_repayments

<TextView android:id="@+id/screenTitle" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</TextView> 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_above="@+layout/loan_disbursement_footer" 
    /> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" > 
<TextView 
    android:id="@+id/borrowerName" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@+id/label" 
    android:textSize="14sp" 
    > 
</TextView> 

<TextView 
    android:id="@+id/loanAmount" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@+id/label" 
    android:textSize="14sp" 
    > 
</TextView> 

<TextView 
    android:id="@+id/installmentNumber" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@+id/label" 
    android:textSize="12sp" 
    > 
</TextView> 

<TextView 
    android:id="@+id/estimatedTotal" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@+id/label" 
    android:textSize="12sp" 
    > 
</TextView> 

</LinearLayout> 
<EditText 
    android:id="@+id/repaymentAmount" 
    android:layout_width="100sp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:inputType="text" 
    android:textSize="12sp" 
    > 
</EditText> 

</RelativeLayout> 

我的活动代码

public void onCreate(Bundle savedInstanceState){ 
    lastKnownLocation = Utility.getLastKnownLocation(this); 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 

    loansForRepayment = (ArrayList<CurrentRepaymentInstallment>)intent.getSerializableExtra(Constants.CURRENT_REPAYMENT_INSTALLMENT); 
    ArrayAdapter<CurrentRepaymentInstallment> adapter = new LoanRepaymentListAdapter(this, loansForRepayment); 

    View footer = getLayoutInflater().inflate(R.layout.loan_disbursement_footer, null); 
    getListView().addFooterView(footer); 

    setListAdapter(adapter); 

    Button button = (Button)findViewById(R.id.disburse); 
    button.setOnClickListener(this); 
} 

也想知道我如何在我的列表onChange中设置编辑的文本的值。谢谢

回答

1

不应该使用EditText而不是TextView

更新:看起来像我在第一遍误会了。您可能的意思是repaymentAmount不可编辑。对?如果是,则尝试注释以下几行:

viewHolder.repaymentAmount.addTextChangedListener(... 
viewHolder.repaymentAmount.setEditableFactory(... 

它仍然是不可编辑的吗?

+0

这不是一个代码问题。问题是,当我选择editText时,键盘弹出在我的模拟器上,并取消选择editText。这是因为我在模拟器上执行它还是有办法严格控制它? –

+0

@Arvind Sridharan:对不起,我不能说出是什么原因,你需要在真实的设备上试用它。 –

+0

会在真实设备上试用并回复。 –

0

只需启用您的edittext通过属性并在其上设置侦听器,当您在完成后(或使用onfocusChangedListener,如我所想)在edittext中输入文本时,它将反映您在Editext内完成键入所需的textview.once的更改。