gpt4 book ai didi

android - 滚动时ListView "coming back"

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:28 28 4
gpt4 key购买 nike

我在 ListView 中遇到了一个奇怪的行为,只有一个 ListView,我的应用程序中有很多 ListView,但只有在这种情况下才会发生。

我会试着解释一下,当我滚动到底部时,好吧,滚动会停止。当我滚动到顶部时,就像顶部的滚动飞溅然后回到底部。

我有this video显示问题。

这是我的 ListView 的 xml:

<ListView
android:id="@+id/lv_resultado_produtos"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@color/Black"
android:dividerHeight="1dip"
android:fastScrollEnabled="true"
android:scrollX="0dip"
android:scrollY="0dip"
android:scrollbarSize="22dip"
android:scrollbarStyle="outsideOverlay" />

并且以编程方式,我仅使用我的 CustomAdapter 设置适配器,仅此而已。

我在其他 ListView 中进行了测试,但没有出现这种行为。

如果有人能帮助我,我会很高兴。

[编辑]

这是我的适配器,它有点复杂,抱歉,我尝试保留所有内容但对字符大小有一些限制:

[PACKAGE]

[IMPORTS]

public class CustomAdapter_Produto_Insercao extends ArrayAdapter<Produto_Insercao> {

static View view_aux = null;

static OnClickListener listener_convertView = null;
static OnClickListener listener_btn_editar_produto = null;

static Activity ctx;

static Dialog_TW ad_estoque;

static List<Condicao_Preco> list_tabela_preco_condicao;

public static boolean clickable = true;

public static boolean highlight = false;

public static int linha_atual = 0;

public static View view_atual = null;

static boolean id_margem = false;
static boolean id_destaca_ipi = false;
static String ls_id_tipo_regime;
static Integer li_cd_cliente;

static String caminho_foto;

static DecimalFormat decimalFormat = null;

static Repositorio repositorio;

static Condicao_Preco c_p_null;

static boolean inNotify = false;

private final LayoutInflater inflater;

private final int resourceId;

public void setClickable(Boolean b){
clickable = b;
}

public CustomAdapter_Produto_Insercao setId_margem(boolean id_margem){
this.id_margem = id_margem;
return this;
}

public CustomAdapter_Produto_Insercao setHighlight(boolean highlight){
this.highlight = highlight;
return this;
}

public CustomAdapter_Produto_Insercao setListener_convertView(OnClickListener listener){
this.listener_convertView = listener;
return this;
}

public CustomAdapter_Produto_Insercao setListener_btn_editar_produto(OnClickListener listener){
this.listener_btn_editar_produto = listener;
return this;
}

public CustomAdapter_Produto_Insercao(Activity context, int resource, List<Produto_Insercao> objects, List<Condicao_Preco> list_tabela_preco_condicao, String ls_id_tipo_regime, Integer li_cd_cliente) {

super(context, resource, objects);

ctx = context;

this.list_tabela_preco_condicao = list_tabela_preco_condicao;

this.inflater = LayoutInflater.from(context);
this.resourceId = resource;
this.ls_id_tipo_regime = ls_id_tipo_regime;
this.li_cd_cliente = li_cd_cliente;

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(',');
decimalFormatSymbols.setGroupingSeparator('.');
decimalFormat = new DecimalFormat("#,##0.00", decimalFormatSymbols);

repositorio = new Repositorio(ctx);
String s_id_margem = repositorio.Parametro_getValue("id_margem");
if(s_id_margem != null && s_id_margem.equals("S")){
id_margem = true;
}

String s_id_destaca_ipi = repositorio.Parametro_getValue("id_destaca_ipi");
if(s_id_destaca_ipi != null && s_id_destaca_ipi.equals("S")){
id_destaca_ipi = true;
}

for(Produto_Insercao p_i : objects){
if(p_i.getQt_pedida() == null || p_i.getQt_pedida() == 0d){
p_i.setId_selecionado(false);
p_i.setId_tabela_condicao_preco(-1);
p_i.setCd_tabela_preco_condicao(-1);
} else {
p_i.setId_selecionado(true);
}
}

caminho_foto = repositorio.Parametro_getValue("caminho_foto");

c_p_null = new Condicao_Preco();
c_p_null.setCd_condicao_preco(0);
c_p_null.setCd_tabela_preco_condicao(0);
c_p_null.setDs_condicao_preco("Selecione");
c_p_null.setId_promocao("N");
c_p_null.setId_fake(true);
}

private static class ViewHolder {
public int position;

public TextView cd_produto;
public TextView ds_produto;
public TextView ds_unidade;
public Button btn_vl_saldo;
public Spinner spn_tabela_condicao_preco;
public TextView vl_unidade_unitario;
public TextView vl_unitario;
public Button qt_produto_menos;
public Button qt_produto_mais;
public EditText_Decimal_TW qt_produto;
public TextView vl_total;
public Button btn_editar_produto;
public TextView vl_custo;
public TextView pr_ipi;
public ImageButton foto_produto;

public Button mais_opcoes;
}

@Override
public void notifyDataSetChanged() {
inNotify = true;

boolean b = false;
if(view_aux != null && view_aux.isPressed()){
b = true;
}

super.notifyDataSetChanged();

if(b){
view_aux.requestFocus();
view_aux.setPressed(true);
view_aux.setSelected(true);
}

inNotify = false;
}

public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;

final Produto_Insercao p = getItem(position);

if(p.getCd_tabela_preco_condicao() == -1){
p.setId_selecionado(false);
} else {
p.setId_selecionado(true);
}

if (convertView == null) {
convertView = inflater.inflate(resourceId, parent, false);

viewHolder = new ViewHolder();

viewHolder.cd_produto = (TextView) convertView.findViewById(R.id.cd_produto);
viewHolder.ds_produto = (TextView) convertView.findViewById(R.id.ds_produto);
viewHolder.ds_unidade = (TextView) convertView.findViewById(R.id.ds_unidade);
viewHolder.btn_vl_saldo = (Button) convertView.findViewById(R.id.btn_vl_saldo);
viewHolder.spn_tabela_condicao_preco = (Spinner) convertView.findViewById(R.id.spn_tabela_condicao_preco);
viewHolder.vl_unidade_unitario = (TextView) convertView.findViewById(R.id.vl_unidade_unitario);
viewHolder.vl_unitario = (TextView) convertView.findViewById(R.id.vl_unitario);
viewHolder.qt_produto_menos = (Button) convertView.findViewById(R.id.qt_produto_menos);
viewHolder.qt_produto_mais = (Button) convertView.findViewById(R.id.qt_produto_mais);
viewHolder.qt_produto = (EditText_Decimal_TW) convertView.findViewById(R.id.qt_produto);
viewHolder.vl_total = (TextView) convertView.findViewById(R.id.vl_total);
viewHolder.btn_editar_produto = (Button) convertView.findViewById(R.id.btn_editar_produto);
viewHolder.vl_custo = (TextView) convertView.findViewById(R.id.vl_custo);
viewHolder.pr_ipi = (TextView) convertView.findViewById(R.id.pr_ipi);
viewHolder.foto_produto = (ImageButton) convertView.findViewById(R.id.foto_produto);

viewHolder.mais_opcoes = (Button) convertView.findViewById(R.id.mais_opcoes);

boolean id_mobile_utiliza_valor_unitario = false;
String s_id_mobile_utiliza_valor_unitario = repositorio.Parametro_getValue("id_mobile_utiliza_valor_unitario");
if(s_id_mobile_utiliza_valor_unitario != null && s_id_mobile_utiliza_valor_unitario.equals("S")){
id_mobile_utiliza_valor_unitario = true;
}
if(!id_mobile_utiliza_valor_unitario){
viewHolder.vl_unidade_unitario.setLayoutParams(new LinearLayout.LayoutParams(0, 0));
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 13);
viewHolder.mais_opcoes.setLayoutParams(ll);
} else {
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.WRAP_CONTENT, 15);
viewHolder.mais_opcoes.setLayoutParams(ll);
}

convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}

Repeater qt_produto_menos_repeater = new Repeater(viewHolder.qt_produto_menos);

viewHolder.qt_produto_menos.setOnLongClickListener(qt_produto_menos_repeater);

Repeater qt_produto_mais_repeater = new Repeater(viewHolder.qt_produto_mais);

viewHolder.qt_produto_mais.setOnLongClickListener(qt_produto_mais_repeater);

if(p.isId_liberado()){
viewHolder.mais_opcoes .setVisibility(View.GONE);

viewHolder.qt_produto_menos .setVisibility(View.VISIBLE);
viewHolder.qt_produto_mais .setVisibility(View.VISIBLE);
viewHolder.qt_produto .setVisibility(View.VISIBLE);
viewHolder.spn_tabela_condicao_preco.setVisibility(View.VISIBLE);
viewHolder.vl_unidade_unitario .setVisibility(View.VISIBLE);
viewHolder.vl_unitario .setVisibility(View.VISIBLE);
viewHolder.vl_total .setVisibility(View.VISIBLE);
viewHolder.btn_editar_produto .setVisibility(View.VISIBLE);
} else {
viewHolder.mais_opcoes .setVisibility(View.VISIBLE);

viewHolder.qt_produto_menos .setVisibility(View.GONE);
viewHolder.qt_produto_mais .setVisibility(View.GONE);
viewHolder.qt_produto .setVisibility(View.GONE);
viewHolder.spn_tabela_condicao_preco.setVisibility(View.GONE);
viewHolder.vl_unidade_unitario .setVisibility(View.GONE);
viewHolder.vl_unitario .setVisibility(View.GONE);
viewHolder.vl_total .setVisibility(View.GONE);
viewHolder.btn_editar_produto .setVisibility(View.GONE);

p.setId_liberado(false);
}

viewHolder.mais_opcoes.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
p.setId_liberado(true);

notifyDataSetChanged();
}
});

viewHolder.position = position;

if(!inNotify)
new MyAsyncTask(position, viewHolder, convertView, p, this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);

if(p.getQt_pedida() != null && p.getQt_pedida() > 0d){
convertView.setBackgroundResource(R.color.DuaPi_Pressed);
} else {
convertView.setBackgroundResource(R.color.WhiteSmoke);
}

if(p.getVl_saldo() != null && p.getVl_saldo() > 0d){
viewHolder.cd_produto .setTextColor(Color.BLACK);
viewHolder.ds_produto .setTextColor(Color.BLACK);
viewHolder.ds_unidade .setTextColor(Color.BLACK);
viewHolder.btn_vl_saldo .setTextColor(Color.BLACK);
} else {
viewHolder.cd_produto .setTextColor(Color.RED);
viewHolder.ds_produto .setTextColor(Color.RED);
viewHolder.ds_unidade .setTextColor(Color.RED);
viewHolder.btn_vl_saldo .setTextColor(Color.RED);
}

if(highlight && position == linha_atual){
convertView.setBackgroundResource(R.color.DuaPi);
} else {
convertView.setBackgroundResource(R.drawable.listview_background);
}

return convertView;
}

private static class MyAsyncTask extends AsyncTask {

private int position;
private ViewHolder viewHolder;
private View convertView;
private Produto_Insercao p;

private List<Condicao_Preco> lista_tabela_preco_condicao;
private CustomAdapter_Produto_Insercao mAdapter;
private SpinnerAdapter_Condicao_Preco adapter;

public MyAsyncTask(int position, ViewHolder viewHolder, View convertView, Produto_Insercao p, CustomAdapter_Produto_Insercao mAdapter) {
this.position = position;
this.viewHolder = viewHolder;
this.convertView = convertView;
this.p = p;
this.mAdapter = mAdapter;

lista_tabela_preco_condicao = new ArrayList<Condicao_Preco>();
}

@Override
protected Object doInBackground(Object... params) {
if(p.isId_liberado()){
viewHolder.btn_editar_produto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
linha_atual = position;
view_atual = convertView;

if(listener_btn_editar_produto != null){
listener_btn_editar_produto.onClick(v);
}
}
});

viewHolder.qt_produto_menos.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
view_aux = viewHolder.qt_produto_menos;

Double qt_anterior = viewHolder.qt_produto.getValor_Double();

viewHolder.qt_produto.setValor(viewHolder.qt_produto.getValor_Double() - p.getFator_venda());

//verifica se o produto não está na lista de itens do pedido, se tiver não deixa zerar...
if(PedidoTabActivity2.find_produto_em_itens(p.getCd_produto())){
if(viewHolder.qt_produto.getValor_Double() <= 0d){
viewHolder.qt_produto.setValor(qt_anterior);
return;
}
}

if(viewHolder.qt_produto.getValor_Double() < 0d){
viewHolder.qt_produto.setValor(0d);
}

p.setQt_pedida(viewHolder.qt_produto.getValor_Double());

calculaInformacoes(false);

if(!atualizaFLEX(p, 30)){
viewHolder.qt_produto.setValor(qt_anterior);
p.setQt_pedida(qt_anterior);
atualizaFLEX(p, 10);
calculaInformacoes(false);
return;
}
}
});

viewHolder.qt_produto_mais.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
view_aux = viewHolder.qt_produto_menos;

Double qt_anterior = viewHolder.qt_produto.getValor_Double();

viewHolder.qt_produto.setValor(viewHolder.qt_produto.getValor_Double() + p.getFator_venda());

p.setQt_pedida(viewHolder.qt_produto.getValor_Double());

calculaInformacoes(false);

if(!atualizaFLEX(p, 30)){
viewHolder.qt_produto.setValor(qt_anterior);
p.setQt_pedida(qt_anterior);
atualizaFLEX(p, 10);
calculaInformacoes(false);
return;
}
}
});

lista_tabela_preco_condicao.add(c_p_null);

lista_tabela_preco_condicao.addAll(list_tabela_preco_condicao);

if(p.getId_promocao() < 1){
for(int i = 0; i < lista_tabela_preco_condicao.size(); i++){
if(lista_tabela_preco_condicao.get(i).getId_promocao().equals("S")){
lista_tabela_preco_condicao.remove(i--);
}
}
}

OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
selection(arg2);
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
};

viewHolder.spn_tabela_condicao_preco.setOnItemSelectedListener(onItemSelectedListener);

adapter = new SpinnerAdapter_Condicao_Preco(ctx, android.R.layout.simple_spinner_item, lista_tabela_preco_condicao, ls_id_tipo_regime, p.getCd_tabela_preco(), p.getCd_produto(), li_cd_cliente);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}

convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(!clickable){
return ;
}

linha_atual = position;
view_atual = convertView;

if(listener_convertView != null){
listener_convertView.onClick(v);
}

p.setId_liberado(true);

mAdapter.notifyDataSetChanged();
}
});

viewHolder.btn_vl_saldo.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(ad_estoque != null){
return ;
}

ad_estoque = new Dialog_TW(ctx);

final Dialog_TW ad_estoque_temp = ad_estoque;
ad_estoque.setView(R.layout.layout_pedido_venda_tab_insercao_estoque);
ad_estoque.setTitle("Consulta de Estoque");
ad_estoque.setCancelable(false);

View view_estoque = ad_estoque.getView();

TextView ds_produto = (TextView) view_estoque.findViewById(R.id.ds_produto);
Button btn_ok = (Button) view_estoque.findViewById(R.id.btn_ok);
ListView lv_resultado = (ListView) view_estoque.findViewById(R.id.lv_resultado);
TextView vl_total = (TextView) view_estoque.findViewById(R.id.vl_total);

ds_produto.setText(p.toString());

btn_ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ad_estoque_temp.getDialog(false, 50d).dismiss();
}
});

ad_estoque.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
ad_estoque = null;

if(CustomAdapter_Pedido_Venda_Pendente_Item_Rascunho.editar){
CustomAdapter_Pedido_Venda_Pendente_Item_Rascunho.editar = false;
}
}
});
Repositorio repositorio = new Repositorio(ctx);
List<Saldo_Estoque> lista_saldo_estoque = repositorio.generic_GetList(Saldo_Estoque.class,
"cd_produto = '" + p.getCd_produto() + "'",
null,
null,
null,
"cd_empresa asc",
false);
Double total = 0d;
for(Saldo_Estoque s_e : lista_saldo_estoque){
List<Empresa> lista_empresa = repositorio.generic_GetList(Empresa.class,
"cd_empresa = '" + s_e.getCd_empresa() + "'",
null,
null,
null,
null,
false);
Empresa e = null;
if(lista_empresa != null && lista_empresa.size() > 0){
e = lista_empresa.get(0);
s_e.setNm_reduzido(e.getNm_reduzido());
}
total += s_e.getQt_disponivel();
}
vl_total.setText(decimalFormat.format(total));

CustomAdapter_Estoque adapter_estoque = new CustomAdapter_Estoque(ctx, R.layout.layout_pedido_venda_tab_insercao_estoque_lista, lista_saldo_estoque).setHighlight(true);
lv_resultado.setAdapter(adapter_estoque);

ad_estoque.getDialog(false, 50d).show();
}
});
return null;
}
@Override
protected void onPostExecute(Object result) {

if(id_margem){
viewHolder.vl_custo.setVisibility(View.VISIBLE);
viewHolder.vl_custo.setText(p.getVl_custo_unitario() == null ? "-" : decimalFormat.format(p.getVl_custo_unitario()));
}

if(id_destaca_ipi){
viewHolder.pr_ipi.setVisibility(View.VISIBLE);
viewHolder.pr_ipi.setText(decimalFormat.format(p.getPr_ipi()));
}

if(caminho_foto != null && p.getId_foto() != null && p.getId_foto().equals("S")){
viewHolder.foto_produto.setVisibility(View.VISIBLE);
viewHolder.foto_produto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Util.carregar_foto_produto(p.getCd_produto(), p.getDs_produto(), p.getNm_foto(), ctx);
}
});
}

viewHolder.cd_produto .setText(p.getCd_produto());
viewHolder.ds_produto .setText(p.getDs_produto());
viewHolder.ds_unidade .setText(p.getDs_unidade_unitaria());
viewHolder.btn_vl_saldo.setText(decimalFormat.format(p.getVl_saldo()));

if(p.isId_liberado()){
if(p.isId_selecionado()){
Unidade u = null;
List<Unidade> lista_Unidade = repositorio.generic_GetList(Unidade.class,
"cd_unidade = " + p.getCd_unidade_embalagem(),
null,
null,
null,
null,
false);
if(lista_Unidade != null && lista_Unidade.size() > 0){
u = lista_Unidade.get(0);
}
Double vl_unidade_unitario = Util.roundDouble(p.getVl_unitario() / (u != null ? u.getFator_conversao() : 1), 2);
viewHolder.vl_unidade_unitario.setText(decimalFormat.format(vl_unidade_unitario));
viewHolder.vl_unitario.setText(decimalFormat.format(p.getVl_unitario()));
viewHolder.vl_total .setText(decimalFormat.format(p.getVl_total()));
} else {
viewHolder.vl_unidade_unitario.setText(" - ");
viewHolder.vl_unitario .setText(" - ");
viewHolder.vl_total .setText(" - ");
}

viewHolder.qt_produto.setValor(p.getQt_pedida() == null ? 0d : p.getQt_pedida());

viewHolder.spn_tabela_condicao_preco.setAdapter(adapter);

if(lista_tabela_preco_condicao.size() > 1){
viewHolder.spn_tabela_condicao_preco.setEnabled(true);
} else {
viewHolder.spn_tabela_condicao_preco.setEnabled(false);
}

if(p.isId_selecionado()){
viewHolder.spn_tabela_condicao_preco.setSelection(find_Condicao_Preco_position(lista_tabela_preco_condicao, p.getCd_tabela_preco_condicao()));
} else {
viewHolder.spn_tabela_condicao_preco.setSelection(0);
}

if(lista_tabela_preco_condicao == null || lista_tabela_preco_condicao.size() < 2){
viewHolder.btn_editar_produto.setEnabled(false);
} else {
viewHolder.btn_editar_produto.setEnabled(true);
}

if(!p.isId_selecionado() && lista_tabela_preco_condicao.size() == 3){
adapter.getDropDownView(2, null, null);
viewHolder.spn_tabela_condicao_preco.setSelection(2);
}
}

convertView.setClickable(true);
convertView.setFocusable(true);
}
private Double calculaInformacoes_getVl_unitario(){
[ONLY CALCULATES THE VALUES]
}
private void calculaInformacoes(boolean calcula_Preco){
[ONLY CALCULATES THE VALUES]
}
private boolean atualizaFLEX(Produto_Insercao p_i, int operacao) {
[ONLY CALCULATES THE VALUES]
}

public Condicao_Preco find_Condicao_Preco(List<Condicao_Preco> lista, Integer cd_tabela_preco_condicao){
for(Condicao_Preco c_p : lista){
if(c_p.getCd_tabela_preco_condicao().equals(cd_tabela_preco_condicao)){
return c_p;
}
}
return null;
}

public Integer find_Condicao_Preco_position(List<Condicao_Preco> lista, Integer cd_tabela_preco_condicao){
for(int i = 0; i < lista.size(); i++){
Condicao_Preco c_p = lista.get(i);
if(c_p.getCd_tabela_preco_condicao().equals(cd_tabela_preco_condicao)){
return i;
}
}
return null;
}

public void selection(Integer arg2){
if(arg2 > 0){
Condicao_Preco c_p = find_Condicao_Preco(lista_tabela_preco_condicao, p.getCd_tabela_preco_condicao());
Condicao_Preco c_p_aux = lista_tabela_preco_condicao.get(arg2);
if(c_p == null || !c_p.getCd_tabela_preco_condicao().equals(c_p_aux.getCd_tabela_preco_condicao())){
if(p.getId_gera_flex().equals("S") && c_p_aux.getDs_condicao_preco().equals("Última Venda")){
if(c_p_aux.getDs_condicao_preco().equals("Última Venda")){
Util.MessageDialog_Ok(ctx,
ctx.getResources().getString(R.string.titulo_dialog_padrao),
"Produto que gera FLEX não pode ser selecionado 'Última Venda'.", Util.ICONE_INFORMATION);
}
p.setCd_tabela_preco_condicao(p.getCd_tabela_preco_condicao());
mAdapter.notifyDataSetChanged();
return;
}
if(c_p_aux.getVl_valor() != null){
p.setCd_tabela_preco_condicao(c_p_aux.getCd_tabela_preco_condicao());
p.setId_selecionado(true);
calculaInformacoes(true);
} else {
Util.MessageDialog_Ok(ctx,
ctx.getResources().getString(R.string.titulo_dialog_padrao),
"Não foi possível encontrar a última venda deste item para este cliente.", Util.ICONE_INFORMATION);
p.setCd_tabela_preco_condicao(p.getCd_tabela_preco_condicao());
mAdapter.notifyDataSetChanged();
}
}
} else {
p.setCd_tabela_preco_condicao(-1);
p.setId_selecionado(false);
calculaInformacoes(true);
}
}
}
}

亲切的问候,

威廉·伯坦

最佳答案

一些事情:

1) AsyncTask 有很多问题。首先,它总是被触发——当你在 getView 中时,静态变量永远不会为真——主线程不能同时在 notifyDataSetChangedgetView 同时!更重要的是,您要从主线程更改 Views,这很糟糕,很糟糕,很糟糕。它充斥着竞争条件,既针对您自己的代码,也针对框架。必须重做以仅触摸 onPostExecute

中的 View

2) 您在 notifyDataSetChanged() 中的代码看起来真的很不稳定 - 您持有对 View 的引用,但如果我在您的 onClick 监听器执行之前单击并滚动,则 View 可能不再打开屏幕。这是一种罕见的情况,当然,但通常会不惜一切代价避免运行对任何 ListView 项目或 subview 的引用。这必然会导致麻烦和/或内存泄漏(尤其是在引用是静态的情况下!)。

我不确定错误的确切原因是什么,但如果我不得不猜测,我会说是 viewAux.setPressed/setSelected/requestFocus 行。具体来说,requestFocus 非常可疑 - Android 滚动窗口中的任何滚动容器,以将获得焦点的 View 放在可见区域。

3) 从 ListView 中删除 android:scrollXscrollY - 我很确定他们实际上什么也没做,但即使他们做了,也可能是错误的事情。

关于android - 滚动时ListView "coming back",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700178/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com