【问题标题】:Progress Dialog not showing I have tried all possible solutions but nothing worked进度对话框未显示我已尝试所有可能的解决方案但没有任何效果
【发布时间】:2018-04-06 09:42:10
【问题描述】:

进度对话框未显示我已尝试所有可能的解决方案,但没有任何效果

这是我的 java 代码,我在其中创建了一个 ProgressDialog 对象并对其进行了初始化,但它仍然在我的活动中不可见 我是否也在启动服务 OnCreate 可能会影响我的 ProgressDialog 不是吗?

    public class MainActivity extends AppCompatActivity {
    private ProgressDialog pDialog;
    private ArrayList<CoinDetail> arrayList;
    private FloatingActionButton fab_Coin;
    private ListView coin_details_listView;
    private CoinDetailsAdapter adapter;
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       pDialog = new ProgressDialog(this);
        pDialog.setMessage("Loading...");
        pDialog.setCancelable(false);
      pDialog.show();
    toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setTitleTextColor(Color.WHITE);
        getSupportActionBar().setTitle("Crypto Live");

        Intent i = new Intent(MainActivity.this, ServiceCoin.class);
        startService(i);

        /*mInterstitialAd = newInterstitialAd();    //For ad
        loadInterstitial();*/

        coin_details_listView = findViewById(R.id.lv_coinName_mainActivity);
        fab_Coin = findViewById(R.id.fab_add_coin);

        arrayList = new ArrayList<>();
        adapter = new CoinDetailsAdapter(MainActivity.this, arrayList);
        coin_details_listView.setAdapter(adapter);
        CoinSingleton.getInstance().setContext(this);
        adapter = CoinSingleton.getInstance().getCoinDetailsAdapter(pDialog);
        coin_details_listView.setAdapter(adapter);
       coin_details_listView.setTextFilterEnabled(true);
        fab_Coin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, FabCoins.class);
                startActivity(intent);
            }
        });

        coin_details_listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Intent intent = new Intent(MainActivity.this, CoinDetails.class);
                intent.putExtra("SHORT", CoinSingleton.getInstance().getCoinDetails().get(position).getShort());
                startActivity(intent);
            }
        });

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.menu2, menu);
        // Retrieve the SearchView and plug it into SearchManager
         SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search));
        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {


        if (TextUtils.isEmpty(newText)) {
            coin_details_listView.clearTextFilter();
        } else {
            coin_details_listView.setFilterText(newText);
        }
        return true;
    }
});
        return true;
    }
}

CoinSingleton java 类

public class CoinSingleton {

    private Context context;
    private static CoinSingleton singleton = null;
    private ArrayList<CoinDetail> coinDetails = new ArrayList<>();
    private CoinDetailsAdapter coinDetailsAdapter;

    public void setCoinDetails(ArrayList<CoinDetail> coinDetails) {
        this.coinDetails = coinDetails;
    }

    /* A private Constructor prevents any other
     * class from instantiating.
     */
    private CoinSingleton() {
    }

    /* Static 'instance' method */
    public static CoinSingleton getInstance() {
        if (singleton == null) {
            singleton = new CoinSingleton();
        }
        return singleton;
    }

    public void setContext(Context context) {
        this.context = context;
    }

    public void setCoinDetailsAdapter(ArrayList<CoinDetail> details) {
        for (int i = 0; i < details.size(); i++) {
            try {
                coinDetails.get(i).setPrice(details.get(i).getPrice());
                coinDetails.get(i).setMktcap(details.get(i).getMktcap());
            } catch (Exception e) {
                coinDetails.add(details.get(i));
            }
        }
        coinDetailsAdapter.setCoinDetailsArrayList(coinDetails);
        //Toast.makeText(context, "Adapter set"+details.get(0).getPrice()+details.get(0).getShort(), Toast.LENGTH_SHORT).show();
        coinDetailsAdapter.notifyDataSetChanged();
    }

    public CoinDetailsAdapter getCoinDetailsAdapter(ProgressDialog dialog) {
        coinDetailsAdapter = new CoinDetailsAdapter(context, coinDetails);
dialog.dismiss();
        return coinDetailsAdapter;
    }

    public ArrayList<CoinDetail> getCoinDetails() {
        return coinDetails;
    }
}

【问题讨论】:

  • 如果将pDialog.show(); 移动到onResume() 而不是onCreate(); 会怎样?我感觉您在活动生命周期中过早地显示对话框。
  • 未解决的问题依然存在
  • 您的对话代码正在运行。我认为CoinSingleton.getInstance().getCoinDetailsAdapter(pDialog); 正在解雇你的pDialog。尝试在下面发表评论。
  • 上传CoinSingleton.java
  • 删除它使我的对话框永远可见 我已经编辑了我的代码 看看现在告诉问题是什么

标签: java android


【解决方案1】:

我认为您缺少 progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

  ProgessDialog progressDialog = new ProgressDialog(ctx);
        progressDialog.setMessage("Updating...");
        progressDialog.setIndeterminate(true);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(false);

编辑

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                pDialog = new ProgressDialog(MainActivity.this);
                pDialog.setMessage("Loading...");
                pDialog.setCancelable(false);
                pDialog.show();
            }
        },100);

【讨论】:

  • 请检查编辑答案,我认为您的服务阻止了对话。
  • 我的应用程序现在崩溃了
  • 让我检查一下。这个问题是由于服务而发生的。
  • 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.app.ProgressDialog.dismiss()”
  • link 检查此链接。和here
【解决方案2】:

问题是您传递 pDialog 并解雇。 dialog.dismiss() 删除您的对话框。

public CoinDetailsAdapter getCoinDetailsAdapter(ProgressDialog dialog) {
    coinDetailsAdapter = new CoinDetailsAdapter(context, coinDetails);
    dialog.dismiss();
    return coinDetailsAdapter;
}

如果您想延迟关闭对话框,请尝试此代码。您的对话框将在 3 秒后关闭。

public CoinDetailsAdapter getCoinDetailsAdapter(final ProgressDialog dialog) {
    coinDetailsAdapter = new CoinDetailsAdapter(context, coinDetails);

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        @Override
        public void run() {
            pDialog.dismiss();
        }
    }, 3000);
    return coinDetailsAdapter;
}

【讨论】:

  • 那么,我需要在适配器填满后立即关闭对话框
  • @Xay 你的适配器很快就被填满了,你看不到对话框。
猜你喜欢
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 2018-06-24
相关资源
最近更新 更多