Java 列表视图在滚动时丢失值,并在单击项目时获取工作位置

Java 列表视图在滚动时丢失值,并在单击项目时获取工作位置,java,android,Java,Android,我有下面的列表视图,带有自定义适配器。我从服务处收到了一个ArrayAdapter,但scroll上出现了一些错误,值丢失了 public class AccountStatementArrayAdapter extends ArrayAdapter<ListaExtratos> { public AccountStatementArrayAdapter(Context context, int textViewResourceId, List<ListaExtrat

我有下面的
列表视图
,带有自定义适配器。我从服务处收到了一个
ArrayAdapter
,但scroll上出现了一些错误,值丢失了

public class AccountStatementArrayAdapter extends ArrayAdapter<ListaExtratos> {

    public AccountStatementArrayAdapter(Context context, int textViewResourceId, List<ListaExtratos> listaExtratos) {
        super(context, textViewResourceId, listaExtratos);
        this.listaExtratos = listaExtratos;
    }

    @Override
    public int getItemViewType(int position) {
        return listaExtratos.get(position).getData() == null ? SECTION : ACCOUNT_STATEMENT_ITEM;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getCount() {
        return listaExtratos.size();
    }

    @Override
    public ListaExtratos getItem(int position) {
        return listaExtratos.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;

        if (v == null) {
            LayoutInflater vi;
            vi = LayoutInflater.from(getContext());
            v = vi.inflate(R.layout.list_item_account_statement, parent, false);
        }

        ListaExtratos p = getItem(position);

        if (p != null && position != 0) {

            TextView simpleDescriptionTextView = (TextView) v.findViewById(R.id.list_item_account_statement_simple_description_field);
            TextView txtDataExtrato = (TextView) v.findViewById(R.id.txtDataExtrato);
            TextView simpleValueTextView = (TextView) v.findViewById(R.id.list_item_account_statement_simple_value_field);
            TextView completeDescriptionTextView = (TextView) v.findViewById(R.id.list_item_account_statement_complete_description_field);
            TextView completeDateTextView = (TextView) v.findViewById(R.id.list_item_account_statement_complete_date_field);
            TextView completeValueTextView = (TextView) v.findViewById(R.id.list_item_account_statement_complete_value_field);
            TextView completeDocumentTextView = (TextView) v.findViewById(R.id.list_item_account_statement_complete_document_field);
            TextView completeBalanceTextView = (TextView) v.findViewById(R.id.list_item_account_statement_complete_balance_field);

            if(p.getHistorico() != null){
                simpleDescriptionTextView.setText(p.getHistorico());
            }

            if(p.getValor() != null){
                if ((p.getValor() != null) && (Double.parseDouble(p.getValor()) < 0)) {
                    simpleValueTextView.setTextColor(Color.RED);
                    completeValueTextView.setTextColor(Color.RED);
                    completeValueTextView.setText(StringUtil.getStringValueFromBigDecimal(new BigDecimal(p.getValor())));
                    simpleValueTextView.setText(StringUtil.getStringValueFromBigDecimal(new BigDecimal(p.getValor())));
                } else {
                    simpleValueTextView.setTextColor(Color.BLACK);
                    completeValueTextView.setTextColor(Color.BLACK);
                    completeValueTextView.setText(StringUtil.getStringValueFromBigDecimal(new BigDecimal(p.getValor())));
                    simpleValueTextView.setText(StringUtil.getStringValueFromBigDecimal(new BigDecimal(p.getValor())));
                }
            }
            if(p.getHistorico() != null)
                completeDescriptionTextView.setText(p.getHistorico());

            if(p.getData() != null)
                completeDateTextView.setText(p.getData());

            if(p.getDocto() != null)
                completeDocumentTextView.setText(p.getDocto());

            completeBalanceTextView.setVisibility(View.GONE);

            if (!datas.contains(p.getData())) {
                txtDataExtrato.setVisibility(View.VISIBLE);
                txtDataExtrato.setText(DateUtil.getDataPorExtenso(DateUtil.dateFromString(p.getData(), "dd/MM/yyyy")));
                datas += p.getData() + ";";
            } else {
                txtDataExtrato.setVisibility(View.GONE);
            }
        }
        return v;
    }
}
公共类AccountStatementArrayAdapter扩展了ArrayAdapter{
public AccountStatementArrayAdapter(上下文上下文、int textViewResourceId、列表listaExtratos){
超级(上下文、textViewResourceId、listaExtratos);
this.listaExtratos=listaExtratos;
}
@凌驾
public int getItemViewType(int位置){
返回listaExtratos.get(position).getData()==null?节:科目\报表\项目;
}
@凌驾
public int getViewTypeCount(){
返回2;
}
@凌驾
public int getCount(){
返回listaExtratos.size();
}
@凌驾
public ListaExtratos getItem(内部位置){
返回listaExtratos.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
拉平机vi;
vi=LayoutInflater.from(getContext());
v=vi.充气(R.布局.列表\项目\账户\报表,父项,假);
}
ListaExtratos p=getItem(位置);
如果(p!=null&&position!=0){
TextView simpleDescriptionTextView=(TextView)v.findViewById(R.id.list\u项目\账户\报表\简单\说明\字段);
TextView txtDataExtrato=(TextView)v.findViewById(R.id.txtDataExtrato);
TextView simpleValueTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u simple\u value\u field);
TextView CompletedDescriptionTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u complete\u description\u field);
TextView completeDateTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u complete\u date\u field);
TextView completeValueTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u complete\u value\u field);
TextView CompletedDocumentTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u complete\u document\u field);
TextView completeBalanceTextView=(TextView)v.findViewById(R.id.list\u item\u account\u statement\u complete\u balance\u field);
if(p.getHistorico()!=null){
simpleDescriptionTextView.setText(p.getHistorico());
}
如果(p.getValor()!=null){
if((p.getValor()!=null)&&(Double.parseDouble(p.getValor())<0)){
simpleValueTextView.setTextColor(Color.RED);
completeValueTextView.setTextColor(Color.RED);
completeValueTextView.setText(StringUtil.getStringValueFromBigDecimal(新的BigDecimal(p.getValor())));
simpleValueTextView.setText(StringUtil.getStringValueFromBigDecimal(新的BigDecimal(p.getValor())));
}否则{
simpleValueTextView.setTextColor(Color.BLACK);
completeValueTextView.setTextColor(Color.BLACK);
completeValueTextView.setText(StringUtil.getStringValueFromBigDecimal(新的BigDecimal(p.getValor())));
simpleValueTextView.setText(StringUtil.getStringValueFromBigDecimal(新的BigDecimal(p.getValor())));
}
}
if(p.getHistorico()!=null)
completeDescriptionTextView.setText(p.getHistorico());
如果(p.getData()!=null)
completeDateTextView.setText(p.getData());
如果(p.getDocto()!=null)
completedDocumentTextView.setText(p.getDocto());
completeBalanceTextView.setVisibility(View.GONE);
如果(!datas.contains(p.getData())){
txtdataextro.setVisibility(View.VISIBLE);
txtdataextro.setText(DateUtil.getDataPorExtenso(DateUtil.dateFromString(p.getData(),“dd/MM/yyyy”));
datas+=p.getData()+“;”;
}否则{
txtdataextro.setVisibility(View.GONE);
}
}
返回v;
}
}

适配器代码中存在一些错误

  • 拆下位置检查!=0
  • 在为每个视图设置空文本的位置也添加一个else检查
  • 例如: 改变这个

      if(p.getHistorico() != null){
                    simpleDescriptionTextView.setText(p.getHistorico());
                }
    

    这些改变应该能解决你的问题


    位置0是我的列表的内部检查。公司的要求。问题在于,要实现滚动,列表会丢失参考位置:(
      if(p.getHistorico() != null){
                    simpleDescriptionTextView.setText(p.getHistorico());
                } 
     else {
          simpleDescriptionTextView.setText("");
     }