Android 使用页脚中的“进度”对话框

Android 使用页脚中的“进度”对话框,android,footer,progressdialog,Android,Footer,Progressdialog,我正在制作一个应用程序,其中我必须在页脚视图中添加进度对话框,但无法在页脚视图中获取任何进度对话框: 主要活动: 我想在此类的页脚中添加进度对话框 public class MainActivity extends Activity implements OnScrollListener { // All variables XmlParser parser; Document doc; String xml; ListView lv; ListViewAdapter adapter; Arr

我正在制作一个应用程序,其中我必须在页脚视图中添加进度对话框,但无法在页脚视图中获取任何进度对话框:

主要活动:

我想在此类的页脚中添加进度对话框

public class MainActivity extends Activity implements OnScrollListener {

// All variables
XmlParser parser;
Document doc;
String xml;
ListView lv;
ListViewAdapter adapter;
ArrayList<HashMap<String, String>> menuItems;
ProgressDialog pDialog;

private String URL = "http://api.androidhive.info/list_paging/?page=1";

// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_NAME = "name";
ProgressDialog dialog;
// Flag for current page
int current_page = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    lv = (ListView) findViewById(R.id.list);

    menuItems = new ArrayList<HashMap<String, String>>();

    parser = new XmlParser();
    xml = parser.getXmlFromUrl(URL); // getting XML
    doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
    // looping through all item nodes <item>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID)); // id not using any where
        map.put(KEY_NAME, parser.getValue(e, KEY_NAME));

        // adding HashList to ArrayList
        menuItems.add(map);
    }

    // LoadMore button
     dialog=new ProgressDialog(this);
   // Button btnLoadMore = new Button(this);
    //btnLoadMore.setText("Load More");

    // Adding Load More button to lisview at bottom
   // lv.addFooterView(dialog); 
// I want to use Progress Dialog in footer
   /* lv.addFooterView(dialog);*/

    // Getting adapter
    adapter = new ListViewAdapter(this, menuItems);
    lv.setAdapter(adapter);
    lv.setOnScrollListener(this);
     lv.addFooterView(dialog.getListView());

    /**
     * Listening to Load More button click event
     * */
    if(dialog.isShowing())
    {

    }
   /* btnLoadMore.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            // Starting a new async task
            new loadMoreListView().execute();
        }
    });*/

    /**
     * Listening to listview single row selected
     * **/
    lv.setOnItemClickListener(new OnItemClickListener() {


        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name))
                    .getText().toString();

            // Starting new intent
            Intent in = new Intent(getApplicationContext(),
                    Test123.class);
            in.putExtra(KEY_NAME, name);
            startActivity(in);
        }
    });
}

/**
 * Async Task that send a request to url
 * Gets new list view data
 * Appends to list view
 * */
private class loadMoreListView extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        // Showing progress dialog before sending http request
        if(dialog.isShowing())
        {
        dialog.cancel();    
        }
        else
        {
        pDialog = new ProgressDialog(
                MainActivity.this);
        pDialog.setMessage("Please wait..");
        pDialog.setIndeterminate(true);
        pDialog.setCancelable(false);
        pDialog.show();
        }
    }

    protected Void doInBackground(Void... unused) {
        runOnUiThread(new Runnable() {
            public void run() {
                // increment current page
                current_page += 1;

                // Next page request
                URL = "http://api.androidhive.info/list_paging/?page=" + current_page;

                xml = parser.getXmlFromUrl(URL); // getting XML
                doc = parser.getDomElement(xml); // getting DOM element

                NodeList nl = doc.getElementsByTagName(KEY_ITEM);
                // looping through all item nodes <item>
                for (int i = 0; i < nl.getLength(); i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);

                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_NAME, parser.getValue(e, KEY_NAME));

                    // adding HashList to ArrayList
                    menuItems.add(map);
                }

                // get listview current position - used to maintain scroll position
                int currentPosition = lv.getFirstVisiblePosition();

                // Appending new data to menuItems ArrayList
                adapter = new ListViewAdapter(
                        MainActivity.this,
                        menuItems);
                lv.setAdapter(adapter);
                // Setting new scroll position
                lv.setSelectionFromTop(currentPosition + 1, 0);

            }
        });

        return (null);
    }

    protected void onPostExecute(Void unused) {
        // closing progress dialog
        pDialog.dismiss();
    }
}

public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    dialog.show();
    lv.setOnScrollListener(this);
     lv.addFooterView(dialog.getListView());
     new loadMoreListView().execute();
}

public void onScrollStateChanged(AbsListView arg0, int arg1) {
    // TODO Auto-generated method stub
     new loadMoreListView().execute();
}
}
任何帮助都将不胜感激。

您可以尝试以下方法:

ProgressDialog myDialog = ProgressDialog.show(MyActivity.this, "Display Information","atthe bottom...", true);
myDialog.getWindow().setGravity(Gravity.BOTTOM);

您可以编写具有特殊操作和行为的简单/增强型自定义控件。例如,此线程上的完整菜单系统

增强的布局比上面链接中的菜单更简单。 创建类似progressDialog的窗口的一些要点:

  • 将FrameLayout用作根视图
  • 在XML布局文件中进行设计
  • 在FrameLayout的子类中对其进行充气(在构造函数中)
  • 提供一些方法,如
    show()
    hide()
    stop()
    或您需要的所有其他方法,并实现这些操作
  • 将布局传递给自定义控件以用作其父控件

    public void addTo(ViewGroup viewgroup){
        viewgroup.addView(this);
    }
    
还有更多

如果你需要更多的信息,请告诉我。

我想,你需要的是一个没有进展的对话

添加新布局pb_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleSmall"
        android:indeterminate="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

在执行setadapter之前,只能执行addFooterView

我只想滚动显示进度对话框
public void addTo(ViewGroup viewgroup){
    viewgroup.addView(this);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleSmall"
        android:indeterminate="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>
view = getLayoutInflater().inflate(R.layout.pb_layout, null);
TextView tv = (TextView)view.findViewById(R.id.textView1);
tv.setText("Please wait..");
ProgressBar pb = (ProgressBar)view.findViewById(R.id.progressBar1);
pb.setIndeterminate(true);
lv.addFooterView(view);