- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 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
中时,静态变量永远不会为真——主线程不能同时在 notifyDataSetChanged
和 getView
同时!更重要的是,您要从主线程更改
Views
,这很糟糕,很糟糕,很糟糕。它充斥着竞争条件,既针对您自己的代码,也针对框架。必须重做以仅触摸 onPostExecute
中的 View 2) 您在 notifyDataSetChanged()
中的代码看起来真的很不稳定 - 您持有对 View 的引用,但如果我在您的 onClick 监听器执行之前单击并滚动,则 View 可能不再打开屏幕。这是一种罕见的情况,当然,但通常会不惜一切代价避免运行对任何 ListView 项目或 subview 的引用。这必然会导致麻烦和/或内存泄漏(尤其是在引用是静态的情况下!)。
我不确定错误的确切原因是什么,但如果我不得不猜测,我会说是 viewAux.setPressed/setSelected/requestFocus
行。具体来说,requestFocus
非常可疑 - Android 滚动窗口中的任何滚动容器,以将获得焦点的 View 放在可见区域。
3) 从 ListView 中删除 android:scrollX
和 scrollY
- 我很确定他们实际上什么也没做,但即使他们做了,也可能是错误的事情。
关于android - 滚动时ListView "coming back",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700178/
我想在其他“已批准”域上放一个指向我网站的链接。当他们单击链接时,它会转到一个页面,该页面会检查引荐来源网址 ($_SERVER['HTTP_REFERRER']) 以确保它们来自已获准拥有我的链接的
我用这一行创建一个 defaultdict 并使用列表作为值对其进行初始化。 page_by_due_date = defaultdict(list) due_pages_list = [] for
我有一个使用大量内存的 Java 程序。我使用 jmap -histo:live 来追踪正在使用所有内存的对象。只有几种类型占用了大部分内存,其中超过 1M,但我无法判断引用的来源来自。 有什么方法可
我正在尝试使用 Android 电话管理器结束调用(新的调用筛选 API 不适合我)。我在网上找到了很多例子,都与我下面的代码非常相似。它编译得很好,但我在运行时遇到了 ClassCastExcept
我有一个用 Visual Studio 编写的小型 C++ dll(当然)。在解决方案代码中,我有一个仅包含版本信息的资源文件。 奇怪的是,当我将已编译的 dll 分片到 Visual Studio
所以我明白了什么是装箱和拆箱。它什么时候出现在现实世界的代码中,或者在什么例子中它是一个问题?我无法想象做这样的事情: int i = 123; object o = i; //
我们的 winforms 应用程序与 MS Word 交互,我们在生成文档并希望在应用程序前面的 Word 中显示它时运行此代码: [setup w as a Word interop object]
我最近已从Mac开发环境切换到Windows开发环境。我广泛用于Chrles代理来捕获网络流量,请求和响应详细信息。现在,我已经在Windows 8中安装了Charles Proxy 3.7版。但是,
假设我有一个带有电子邮件表单元素的表单;例如,当我在此字段中输入 1 个字母并按“确定”时,我会在工具提示中收到一条用我的语言(法语)显示的消息:“Veuillez saisir une adress
解释问题: 我现在已经尝试让 firebase_messaging 工作近一周。 我成功设置了一个旧版 Xcode APNS 应用程序,该应用程序在生成所有新证书等后工作。 但是使用 firebase
我想知道域实现的常见做法是什么。首先设计需要持久性或数据库模式的业务对象,然后从实体关系图(然后是 ORM poco*)生成它? 我要开始一个解决方案,但我想知道哪个是最优选的“模式”。 (*由 NH
我看到一个用 Node.js 构建的应用程序,但我不明白 describe 和 it 这两个词如何可用? 在浏览器控制台中,它 是一个函数,describe 抛出一个ReferenceError。 我
我看到一个用 Node.js 构建的应用程序,但我不明白 describe 和 it 这两个词如何可用? 在浏览器控制台中,它 是一个函数,describe 抛出一个ReferenceError。 我
所以我正在尝试学习 django 并遵循本教程:https://docs.djangoproject.com/en/1.10/intro/tutorial01/ 按照教程制作民意调查应用程序后,当我回
故事 我已经在 OpenGL 中编码大约一年了(在相同的硬件上),我最近才得到像上图中那样的工件。它们在短时间内(几分钟)连续运行我的程序后出现,并出现在任何地方:从写字板(见图片)到我的桌面和任务栏
我对下面名为test(第 3 行)的函数的使用感到好奇: var pattern = /[1-9][1-9]{5}/; var str = 'this is 248760!'; alert(patte
当我正在使用的 CodeIgniter 应用程序尝试特定的 UPDATE 操作时,我收到一个非常奇怪的数据库错误。 Active Record 调用是: $this->db->update('eval
我的目标是显示一张图片并将其慢慢带到前台(并在主要时间内延长)。我希望当我在 div/img 上检测到事件 onmouseover 时可以完成此操作。 目前,我使用隐藏属性,但我不喜欢它,因为它就像:
我有一个页面,我通过查询字符串发送了一个参数。 如果我使用 Request.QueryString["Format"] 检索它,我会遇到类型 'CD\DVD' 的问题。它作为“CD\\DVD”返回。重
我在 ListView 中遇到了一个奇怪的行为,只有一个 ListView,我的应用程序中有很多 ListView,但只有在这种情况下才会发生。 我会试着解释一下,当我滚动到底部时,好吧,滚动会停止。
我是一名优秀的程序员,十分优秀!