Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone



Clound SSD Virtual Server

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS) การสร้าง Android เพื่อแสดง ProgressBar แบบ Title Bar โดย Indeterminate Progress Bar จะแสดงผลในส่วนของ Title Bar ของ Application อยู่ด้านบนขวา ซึ่งจะทำงานเป็นรูปหมุ่น ๆ ในขณะที่เราสั่งให้มันทำงาน

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)


การใช้ Indeterminate Progress Bar เป็นการทำงานแบบง่าย ๆ สามารถเขียน Code สั้น ๆ ในการสั่งให้ ProgressBar แสดงผลและทำงาน

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

setProgressBarIndeterminateVisibility(true);

setProgressBarIndeterminateVisibility(false);

โดยคำสั่งแรกเป็นการเรียกใช้ Indeterminate Progress Bar และคำสั่งที่ 2 เป็นการแสดง Progress Bar และ คำสั่งที่ 3 จะเป็นการหยุดการทำงานของ Progress Bar

เรามาลองเขียนโปรแกรม Indeterminate Progress Bar ในรูปแบบต่าง ๆ เช่น การแสดง Indeterminate Progress Bar ในขณะที่โปรแกรมกำลังโหลดข้อมูลจาก Server

AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />

ในการเขียน Android เพื่อติดต่อกับ Internet จะต้องกำหนด Permission ในส่วนนี้ด้วยทุกครั้ง


Example 1 การสร้าง Indeterminate Progress Bar แบบ Start และ Stop แบบง่าย ๆ

โครงสร้างของไฟล์ประกอบด้วย 2 ไฟล์คือ MainActivity.java, activity_main.xml

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="74dp"
        android:layout_marginTop="73dp"
        android:text="Start" />

    <Button
        android:id="@+id/btnStop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnStart"
        android:layout_alignBottom="@+id/btnStart"
        android:layout_marginLeft="30dp"
        android:layout_toRightOf="@+id/btnStart"
        android:text="Stop" />

</RelativeLayout>









MainActivity.java
package com.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.Button;

public class MainActivity extends Activity {


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
		
		setContentView(R.layout.activity_main);
		
		// Default 
		setProgressBarIndeterminateVisibility(false); 


		// btnStart
		Button btnStart = (Button) findViewById(R.id.btnStart);
		btnStart.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// Perform action on click
				setProgressBarIndeterminateVisibility(true); 
			}
		});
		
		// btnStop
		Button btnStop = (Button) findViewById(R.id.btnStop);
		btnStop.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// Perform action on click
				setProgressBarIndeterminateVisibility(false); 
			}
		});	

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}


Screenshot

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

แสดงผล Application จะเห็นว่าครั้งแรกยังไม่มี ProgressBar

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

คลิกที่ Start จะเห็นว่า ProgressBar กำลังทำงาน

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

คลิกที่ Stop เพื่อให้โปรแกรมหยุดทำงาน




Example 2 ทดสอบการใช้ Indeterminate Progress Bar ในขณะที่กำลังโหลดข้อมูลจาก Server

Web Server

member
CREATE TABLE `member` (
  `MemberID` int(2) NOT NULL,
  `Name` varchar(50) NOT NULL,
  `Tel` varchar(50) NOT NULL,
  PRIMARY KEY  (`MemberID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- 
-- Dumping data for table `member`
-- 

INSERT INTO `member` VALUES (1, 'Weerachai', '0819876107');
INSERT INTO `member` VALUES (2, 'Win', '021978032');
INSERT INTO `member` VALUES (3, 'Eak', '0876543210');


Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

getJSON.php
<?
	$objConnect = mysql_connect("localhost","root","root");
	$objDB = mysql_select_db("mydatabase");

	$strSQL = "SELECT * FROM member WHERE 1  ";
	$objQuery = mysql_query($strSQL);
	$intNumField = mysql_num_fields($objQuery);
	$resultArray = array();
	while($obResult = mysql_fetch_array($objQuery))
	{
		$arrCol = array();
		for($i=0;$i<$intNumField;$i++)
		{
			$arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i];
		}
		array_push($resultArray,$arrCol);
	}
	
	mysql_close($objConnect);
	
	echo json_encode($resultArray);
?>

ไฟล์ php ในฝั่ง Server ที่จะส่งข้อมูลให้กับ Android

Android HttpGet and HttpPost

พื้นฐานให้อ่านบทความ HttpGet กับ HttpPost จะได้เข้าใจง่ายขึ้น


Android Project

โครงสร้างของไฟล์ประกอบด้วย 3 ไฟล์คือ MainActivity.java, activity_main.xml และ activity_column.xml

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

activity_main.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
   	<TableRow
      android:id="@+id/tableRow1"
      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:gravity="center"
        android:text="JSON Progress Example : "
        android:layout_span="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
  	        
 	</TableRow>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
 
  <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.1">   
     
     <ListView
         android:id="@+id/listView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
     </ListView>
  	        
 	</LinearLayout>

	<View
		android:layout_height="1dip"
		android:background="#CCCCCC" />
   		  
   	<LinearLayout
      android:id="@+id/LinearLayout1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="5dip" >

   		<TextView
   		    android:id="@+id/textView2"
   		    android:layout_width="wrap_content"
   		    android:layout_height="wrap_content"
   		    android:text="By.. ThaiCreate.Com" />

	</LinearLayout>
	
</TableLayout>



xxxxxxxx

activity_column.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/linearLayout1" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent" >

	<TextView
	android:id="@+id/ColMemberID" 
		android:layout_width="0dp"
		android:layout_height="wrap_content" 
		android:layout_weight="1"
		android:text="MemberID"/>

	<TextView
		android:id="@+id/ColName" 
		android:layout_width="0dp"
		android:layout_height="wrap_content" 
		android:layout_weight="2"
		android:text="Name"/>

	<TextView
	    android:id="@+id/ColTel"
	    android:layout_width="0dp"
	    android:layout_height="wrap_content"
	    android:layout_weight="1"
	    android:text="Tel" />

</LinearLayout>



MainActivity.java
package com.myapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
	
    
    @SuppressLint("NewApi")
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        
        setContentView(R.layout.activity_main);
        
        setProgressBarIndeterminateVisibility(false); 
        
        // Permission StrictMode
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
       
        new  DownloadJSONAsync().execute();
		
    }
    
	public void ShowResult(final ArrayList<HashMap<String, String>> MyArrList)
	{
        // listView1
        final ListView lisView1 = (ListView)findViewById(R.id.listView1); 
        
        SimpleAdapter sAdap;
        sAdap = new SimpleAdapter(MainActivity.this, MyArrList, R.layout.activity_column,
                new String[] {"MemberID", "Name", "Tel"}, new int[] {R.id.ColMemberID, R.id.ColName, R.id.ColTel});      
        lisView1.setAdapter(sAdap);
        
        final AlertDialog.Builder viewDetail = new AlertDialog.Builder(this);
		// OnClick Item
		lisView1.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> myAdapter, View myView,
					int position, long mylng) {

				String sMemberID = MyArrList.get(position).get("MemberID")
						.toString();
				String sName = MyArrList.get(position).get("Name")
						.toString();
				String sTel = MyArrList.get(position).get("Tel")
						.toString();
				
                //String sMemberID = ((TextView) myView.findViewById(R.id.ColMemberID)).getText().toString();
                // String sName = ((TextView) myView.findViewById(R.id.ColName)).getText().toString();
                // String sTel = ((TextView) myView.findViewById(R.id.ColTel)).getText().toString();
                
				viewDetail.setIcon(android.R.drawable.btn_star_big_on);
				viewDetail.setTitle("Member Detail");
				viewDetail.setMessage("MemberID : " + sMemberID + "\n"
						+ "Name : " + sName + "\n" + "Tel : " + sTel);
				viewDetail.setPositiveButton("OK",
						new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								dialog.dismiss();
							}
						});
				viewDetail.show();

			}
		});
	}
	
	 // Download JSON in Background
    public class DownloadJSONAsync extends AsyncTask<String, Void, Void> {
    	
     	
    	ArrayList<HashMap<String, String>> mArrList;
    	
        protected void onPreExecute() {
        	super.onPreExecute();
        	setProgressBarIndeterminateVisibility(true); 
        }

        @Override
        protected Void doInBackground(String... params) {
            // TODO Auto-generated method stub
      

    		/** JSON return
    		 *  [{"MemberID":"1","Name":"Weerachai","Tel":"0819876107"},
    		 * {"MemberID":"2","Name":"Win","Tel":"021978032"},
    		 * {"MemberID":"3","Name":"Eak","Tel":"0876543210"}]
    		 */
    		
    		String url = "https://www.thaicreate.com/android/getJSON.php";

    		try {
    			
    			JSONArray data = new JSONArray(getJSONUrl(url));
    			
    			mArrList = new ArrayList<HashMap<String, String>>();
    			HashMap<String, String> map;
    			
    			for(int i = 0; i < data.length(); i++){
                    JSONObject c = data.getJSONObject(i);
                    
        			map = new HashMap<String, String>();
        			map.put("MemberID", c.getString("MemberID"));
        			map.put("Name", c.getString("Name"));
        			map.put("Tel", c.getString("Tel"));
        			mArrList.add(map);
        			
    			}

    		} catch (JSONException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

        	
    		return null;
        }

        protected void onPostExecute(Void unused) {
        	ShowResult(mArrList); // When Finish Show Content
        	setProgressBarIndeterminateVisibility(false); 
        }
        
    }
	

	public String getJSONUrl(String url) {
		StringBuilder str = new StringBuilder();
		HttpClient client = new DefaultHttpClient();
		HttpGet httpGet = new HttpGet(url);
		try {
			HttpResponse response = client.execute(httpGet);
			StatusLine statusLine = response.getStatusLine();
			int statusCode = statusLine.getStatusCode();
			if (statusCode == 200) { // Download OK
				HttpEntity entity = response.getEntity();
				InputStream content = entity.getContent();
				BufferedReader reader = new BufferedReader(new InputStreamReader(content));
				String line;
				while ((line = reader.readLine()) != null) {
					str.append(line);
				}
			} else {
				Log.e("Log", "Failed to download file..");
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return str.toString();
	}
	
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
    
}


Screenshot

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

แสดง ProgressBar ในขณะที่โปรแกรมกำลังทำงาน

Android Indeterminate Progress Bar (FEATURE_INDETERMINATE_PROGRESS)

หลังจากที่โหลดข้อมูลเรียบร้อยแล้ว ProgressBar จะหยุดทำงาน และแสดงผลออกทางหน้าจอ









Android HttpGet and HttpPost

Android Thread and Handler

Android AsyncTask and ProgressBar


   
Share


ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท


ลองใช้ค้นหาข้อมูล


   


Bookmark.   
       
  By : ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ)
  Score Rating :  
  Create/Update Date : 2012-08-11 13:43:04 / 2017-03-26 22:55:53
  Download : No files
 Sponsored Links / Related

 
Android and Custom ProgressBar
Rating :

 
Android Loading JSON and ProgressBar/ProgressDialog
Rating :

 
Android ProgressDialog When Click Item in ListView for Download file from Server
Rating :

 
Android AsyncTask and ProgressBar
Rating :

 
Android Multiple Upload Send file to Server and Show Items ProgressBar in ListView
Rating :

 
Android ProgressBar/ProgressDialog Search Display result Data from Web Server
Rating :

 
Android SeekBar Control MediaPlayer Progress
Rating :

 
Android Multiple Download file in ListView and Show Progress unit percentage
Rating :

 
AsyncTask and ProgressDialog (showDialog, dismissDialog, removeDialog : Deprecated)
Rating :


ThaiCreate.Com Forum


Comunity Forum Free Web Script
Jobs Freelance Free Uploads
Free Web Hosting Free Tools

สอน PHP ผ่าน Youtube ฟรี
สอน Android การเขียนโปรแกรม Android
สอน Windows Phone การเขียนโปรแกรม Windows Phone 7 และ 8
สอน iOS การเขียนโปรแกรม iPhone, iPad
สอน Java การเขียนโปรแกรม ภาษา Java
สอน Java GUI การเขียนโปรแกรม ภาษา Java GUI
สอน JSP การเขียนโปรแกรม ภาษา Java
สอน jQuery การเขียนโปรแกรม ภาษา jQuery
สอน .Net การเขียนโปรแกรม ภาษา .Net
Free Tutorial
สอน Google Maps Api
สอน Windows Service
สอน Entity Framework
สอน Android
สอน Java เขียน Java
Java GUI Swing
สอน JSP (Web App)
iOS (iPhone,iPad)
Windows Phone
Windows Azure
Windows Store
Laravel Framework
Yii PHP Framework
สอน jQuery
สอน jQuery กับ Ajax
สอน PHP OOP (Vdo)
Ajax Tutorials
SQL Tutorials
สอน SQL (Part 2)
JavaScript Tutorial
Javascript Tips
VBScript Tutorial
VBScript Validation
Microsoft Access
MySQL Tutorials
-- Stored Procedure
MariaDB Database
SQL Server Tutorial
SQL Server 2005
SQL Server 2008
SQL Server 2012
-- Stored Procedure
Oracle Database
-- Stored Procedure
SVN (Subversion)
แนวทางการทำ SEO
ปรับแต่งเว็บให้โหลดเร็ว


Hit Link
   







Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่