android资料总结

一.android不同对话框

一、确认对话框

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />

<Button android:text="@string/tanchu"
 android:id="@+id/tanchu"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"></Button>
</LinearLayout>

package com.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//确认对话框
public class ConfimDialogActivity extends Activity {
 private Button tanchu;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tanchu=(Button)findViewById(R.id.tanchu);
        tanchu.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    //显示弹出对话框
    showAlertDialog();
   }
        });
    }
    //只能有一个正选按钮
    private void showAlertDialog() {
  // TODO Auto-generated method stub
     //创建AlertDialog
  AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
  //显示对话框信息(该对话框的作用)
  alertdialog.setMessage("你确定退出吗")
  //Sets whether the dialog is cancelable or not. Default is true.
  //设置对话框是否可以被取消,默认可以被取消
  .setCancelable(false)
  .setPositiveButton("YES", new DialogInterface.OnClickListener() {
  
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    ConfimDialogActivity.this.finish();
   }
  })
 .setNegativeButton("NO", new DialogInterface.OnClickListener() {
 
  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   //返回到原页面下面两种方法都可以,关闭对话框返回到原页面
   //dialog.cancel();
   dialog.dismiss();
  }
 });
 AlertDialog alert=alertdialog.create();
 alert.show();
 }
}

--------------------------------------------
二、其它对话框(包括自定义对话框,设置多选,单选)
package com.dialog;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class ListDialogActivity extends Activity{
 Button tanchu;
 public static final int orderId=1;
 private static final String color[]={"red","blue","puple","yellow","black"};
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  this.setContentView(R.layout.main);
//  tanchu=(Button)findViewById(R.id.tanchu);
//  tanchu.setOnClickListener(new OnClickListener(){
//   @Override
//   public void onClick(View v) {
//    // TODO Auto-generated method stub
//    alertListDialog();
//   } 
//  });
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  menu.add(1, 1,1,"提示对话框");
  return super.onCreateOptionsMenu(menu);
  
 }

 @Override
 public boolean onMenuItemSelected(int featureId, MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case orderId:
   createNewDialog();break;
     default:break;
  }
  
  return super.onMenuItemSelected(featureId, item);
 }

 private void createNewDialog() {
  // TODO Auto-generated method stub
  LayoutInflater inflater=LayoutInflater.from(ListDialogActivity.this);
  View layout=inflater.inflate(R.layout.customerdialog,null);
  //注意这里是通过layout获得对象
  TextView v=(TextView)layout.findViewById(R.id.view1);
  v.setText("this is a custom dialog111111111111");
  Button b=(Button)layout.findViewById(R.id.tanchu);
  b.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    ListDialogActivity.this.finish();
   }
   
  });
  AlertDialog.Builder ab=new AlertDialog.Builder(ListDialogActivity.this);
  ab.setView(layout);
  AlertDialog alertDialog=ab.create();
  alertDialog.setTitle("you are welcome");
  alertDialog.show();
 }

 private void alertListDialog() {
  // TODO Auto-generated method stub
  AlertDialog.Builder alertd=new AlertDialog.Builder(this);
  alertd.setTitle("pieck a color");
  /**只选一个普通用法
   * alertd.setItems(color, new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    Toast.makeText(ListDialogActivity.this,color[which].toString(),Toast.LENGTH_SHORT).show();
   }
  });
   */
  /**
   * 设置只能选一个的按钮  -1说明一个也没有选,否则赋得值是哪一个,显示的就是那一个color数组的下标一样
   * alertd.setSingleChoiceItems(color, -1, new DialogInterface.OnClickListener() {
   
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    Toast.makeText(ListDialogActivity.this,color[which].toString(),Toast.LENGTH_SHORT).show();
    //显示提示信息后关闭对话框
    dialog.cancel();
   }
  });
   */
  /**
   * 可以多选的对话框
   */
  boolean[] clicks={false,false,false,false,false};
  alertd.setMultiChoiceItems(color,clicks,new DialogInterface.OnMultiChoiceClickListener() {
   ArrayList<String> colorl=new ArrayList<String>();
   @Override
   public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    // TODO Auto-generated method stub
    if(isChecked){
     colorl.add(color[which]);
     Toast.makeText(ListDialogActivity.this, colorl.toString(),Toast.LENGTH_SHORT).show();
    }
    else{
     colorl.remove(color[which]);
     Toast.makeText(ListDialogActivity.this, colorl.toString(),Toast.LENGTH_SHORT).show();
    }
   }
  });
  AlertDialog alert1=alertd.create();
  //下面一句话显示对话框不能丢
  alert1.show();
 }

}

 

二.android菜单的创建

下面是菜单的创建方法
(1).optionMenu:通过按Menu键进而在屏幕底端显示菜单。
(2).ContextMenu:通过View组件添加长按监听器,进而处理长按显示的菜单
(3).prepareOptionMenu:一般在OnCreateOptionMenu运行之后才运行,一般用于改变菜单显示的状态。
----------------------------------------------------------
package com.android.activity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class OptionMenu extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  this.setContentView(R.layout.main);
 }
 //直接在Activity中创建菜单这种方法不推荐
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  //menu.add(groupId, itemId, order, title);
  //order代表的是种类,不关注可用none
  menu.add(1, 0, 0, "显示信息").setIcon(R.drawable.show);
  menu.add(1, 1, 0, "退出信息").setIcon(R.drawable.exit);
  return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case 0:
   Toast.makeText(OptionMenu.this,"显示信息", Toast.LENGTH_LONG).show();
   break;
  case 1:
   Toast.makeText(OptionMenu.this,"退出信息", Toast.LENGTH_LONG).show();
   this.finish();
   break;
  }
  return super.onOptionsItemSelected(item);
 }
 
 //下面这种方法是在xml文件中创建菜单比较常用
 xml文件如下(一般在res中单独创建一个文件夹menu,之后在创建一个文件夹):
 <?xml version="1.0" encoding="utf-8"?>
 <menu
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/show" android:title="@string/show"    android:icon="@drawable/show"></item>
    <item android:id="@+id/exit" android:title="@string/exit"    android:icon="@drawable/exit"></item>
  </menu>
 /*@Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  MenuInflater inflater=getMenuInflater();
  inflater.inflate(R.menu.optionmenu, menu);
  return super.onCreateOptionsMenu(menu);
  
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  System.out.println(item.getItemId());
  switch(item.getItemId()){
  case R.id.show:
   Toast.makeText(OptionMenu.this,"显示信息", Toast.LENGTH_LONG).show();
   break;
  case R.id.exit:
   Toast.makeText(OptionMenu.this,"退出信息", Toast.LENGTH_LONG).show();
   //退出当前项目
   this.finish();
   break;
  }
  return super.onOptionsItemSelected(item);
 }*/

}
---------------------------------------------
----------长按菜单
xml文件如下:(注意不需要添加布局)
<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/cut" android:title="@string/cut"/>
  <item android:id="@+id/copy" android:title="@string/copy"/>
  <item android:id="@+id/paste" android:title="@string/paste"/>
</menu>
-------------------------------
public class ContextMenuA extends Activity {
 //View都可以添加ContextMenuListener,既可以添加长按菜单
 Button but;
 TextView text;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        but=(Button)findViewById(R.id.but);
        text=(TextView)findViewById(R.id.text);
        //添加长按点击
        but.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
   @Override
   public void onCreateContextMenu(ContextMenu menu, View v,
     ContextMenuInfo menuInfo) {
    // TODO Auto-generated method stub
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
   }
   
        });
    }
    //长按菜单响应函数(注意在监听器外)
    @Override
 public boolean onContextItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  System.out.println("bbbbbbbbbbbbbbbbbb");
  switch(item.getItemId()){
  case R.id.cut:
   Toast.makeText(ContextMenuA.this,"剪切文本", Toast.LENGTH_SHORT).show();
   break;
  case R.id.copy:
   Toast.makeText(ContextMenuA.this,"复制文本", Toast.LENGTH_SHORT).show();
   break;
  case R.id.paste:
   Toast.makeText(ContextMenuA.this,"粘贴文本", Toast.LENGTH_SHORT).show();
   break;
  }
  return super.onContextItemSelected(item);
 }
}
---------------------------------------------------------------
--prepateOptionMenu的用法
--prepateOptionMenu的用法

通过鼠标滚动获得焦点促发事件,进而改变菜单显示状态,控制组件是否可见
package com.phone.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.phone.util.MyOpenHelper;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.AdapterView.OnItemSelectedListener;

public class LookPhoneRecordActivity extends Activity {
 
 private ListView listview;
 private Intent intent;
 private ArrayList<HashMap<String,Object>> listuser;
 private ArrayList<String> usrl;
 private Bundle bundle;
 public static final int ADDP=1;
 public static final int EDITP=2;
 public boolean menustatus=false;
 private int flagPosition;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listview=(ListView)findViewById(R.id.listphonerecord);
        listuser=getListdata();
        SimpleAdapter simple=new SimpleAdapter(this,listuser, R.layout.mainitem, new String[]{"uname","utel"}, new int[]{R.id.uname,R.id.utel});
        listview.setAdapter(simple);
        simple.notifyDataSetChanged();
        listview.setOnItemClickListener(new LisViewListener());
        listview.setOnItemLongClickListener(new ListViewLongListener());
        //设置集中焦点时的监听器
        listview.setOnItemSelectedListener(new OnItemSelectedListener(){

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
      int position, long arg3) {
     // TODO Auto-generated method stub
     flagPosition=position;
     menustatus=true;
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
     // TODO Auto-generated method stub
     menustatus=false;
    }
         
         });
    }
    class LisViewListener implements OnItemClickListener {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position,
    long arg3) {
   // TODO Auto-generated method stub
   intent=LookPhoneRecordActivity.this.getIntent();
   int j=0;
   String umessage=usrl.get(position);
   String uarray[]=umessage.split("a_");
   bundle=new Bundle();
   bundle.putString("userid",uarray[j++]);
   bundle.putString("name", uarray[j++]);
   bundle.putString("tel", uarray[j++]);
   bundle.putString("email", uarray[j++]);
   bundle.putString("addr", uarray[j++]);
   intent.putExtra("Bun", bundle);
   intent.setClass(LookPhoneRecordActivity.this,UpdateUserMessage.class);
   LookPhoneRecordActivity.this.startActivity(intent);
  }

 }
    class ListViewLongListener implements OnItemLongClickListener {

  @Override
  public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
    int position, long arg3) {
   // TODO Auto-generated method stub
   showAlertDialog(position);
   return true;
  }

 }
 private ArrayList<HashMap<String,Object>> getListdata() {
  // TODO Auto-generated method stub
  MyOpenHelper open=new MyOpenHelper(LookPhoneRecordActivity.this,"userphone.db", null, 1);
  SQLiteDatabase data=open.getReadableDatabase();
  Cursor cursor=data.query("userphone",new String[]{"userid","username","tel","email","addr"},null, null, null,null, null);
  usrl=new ArrayList<String>();
  listuser=new ArrayList<HashMap<String,Object>>();
  int i=1;
  while(cursor.moveToNext()){
   HashMap<String,Object> map=new HashMap<String,Object>();
   String uid=cursor.getString(cursor.getColumnIndex("userid"));
   String name=cursor.getString(cursor.getColumnIndex("username"));
   String tel=cursor.getString(cursor.getColumnIndex("tel"));
   String emailm=cursor.getString(cursor.getColumnIndex("email"));
   String addrm=cursor.getString(cursor.getColumnIndex("addr"));
   usrl.add(uid+"a_"+name+"a_"+tel+"a_"+emailm+"a_"+addrm);
   map.put("uname", name);
   map.put("utel", tel);
   listuser.add(map);
   System.out.println("查询列表是:"+listuser);
  }
  cursor.close();
  return listuser;
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  //if(listview.getItemAtPosition(position));
  MenuInflater menuinflater=this.getMenuInflater();
  menuinflater.inflate(R.menu.contactmenu, menu);
  return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case R.id.addperson:
   intent=new Intent(LookPhoneRecordActivity.this,AddPersonContactActicity.class);
   this.startActivity(intent);
   break;
  case R.id.editperson:
   intent=LookPhoneRecordActivity.this.getIntent();
   int j=0;
   String umessage=usrl.get(item.getGroupId());
   String uarray[]=umessage.split("a_");
   bundle=new Bundle();
   bundle.putString("userid",uarray[j++]);
   bundle.putString("name", uarray[j++]);
   bundle.putString("tel", uarray[j++]);
   bundle.putString("email", uarray[j++]);
   bundle.putString("addr", uarray[j++]);
   intent.putExtra("Bun", bundle);
   intent.setClass(LookPhoneRecordActivity.this,UpdateUserMessage.class);
   LookPhoneRecordActivity.this.startActivity(intent);
   break;
  default:break;
  }
  return super.onOptionsItemSelected(item);
 }
 //只能有一个正选按钮
    private void showAlertDialog(final int position) {
  // TODO Auto-generated method stub
     //创建AlertDialog
  AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
  //显示对话框信息(该对话框的作用)
  alertdialog.setMessage("你确定删除吗")
  //Sets whether the dialog is cancelable or not. Default is true.
  //设置对话框是否可以被取消,默认可以被取消
  .setCancelable(false)
  .setPositiveButton("YES", new DialogInterface.OnClickListener() {
  
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    listuser.remove(position);
    MyOpenHelper my=new MyOpenHelper(LookPhoneRecordActivity.this,"userphone.db", null, 1);
    SQLiteDatabase da=my.getWritableDatabase();
    String uorder=usrl.get(position);
    String uid[]=uorder.split("a_");
    String uuid=uid[0].toString();
    da.delete("userphone","userid=?", new String[]{uuid});
    System.out.println("delete success");
    dialog.dismiss();
   }
  })
 .setNegativeButton("NO", new DialogInterface.OnClickListener() {
 
  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   //返回到原页面下面两种方法都可以,关闭对话框返回到原页面
   //dialog.cancel();
   dialog.dismiss();
  }
 });
 AlertDialog alert=alertdialog.create();
 alert.show();
 }
 @Override
 public boolean onPrepareOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  if(menustatus==false){
   menu.findItem(R.id.editperson).setVisible(false);
  }
  else{
   menu.findItem(R.id.editperson).setVisible(true);
  }
  return super.onPrepareOptionsMenu(menu);
 }
   
}

 

 三.android几种框架的用法

android的框架主要包括:LinearLayout,TableLayout,FrameLayout,AbsoluteLayout,RelativeLayout.
下面会通过程序帮助理解
-----------LinearLayout-----------------
控制页面一般的排列方式:默认即是此种方式。可以嵌套使用,有横排和竖排。

页面文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
<LinearLayout  android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1">
 <TextView android:text="red" android:background="#aa0000"  android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="green" android:background="#00aa00"  android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="blue" android:background="#0000aa"  android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="yellow" android:background="#aaaa00"  android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
</LinearLayout>
<LinearLayout android:orientation="vertical"  android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1">
 <TextView android:text="row1"         android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="row2"             android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="row3"             android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
 <TextView android:text="row4"             android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1"></TextView>
</LinearLayout>
</LinearLayout>

java处理文件如下:
package com.android;

import android.app.Activity;
import android.os.Bundle;

public class MulLinerLayout extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.mullinerlayout);
 }

}
----------------------------------------------------------------------------------------
----------------------TableLayout---------------------
xml文件

<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow android:id="@+id/TableRow01"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="Open..."
 android:paddingLeft="30dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
<TextView android:text="Ctr-O" 
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</TableRow>

<TableRow android:id="@+id/TableRow02"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="Save..."
 android:paddingLeft="30dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
<TextView android:text="Ctr-S" 
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</TableRow>

<TableRow android:id="@+id/TableRow03"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="Save As..."
 android:paddingLeft="30dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
<TextView android:text="Ctr-Shift-S" 
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</TableRow>

<View android:id="@+id/View01"
 android:background="#00aa00"
 android:layout_height="3dip">
 </View>
 
<TableRow android:id="@+id/TableRow04"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="X Import..."
 android:paddingLeft="30dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
<TextView
android:text="" 
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</TableRow>

<TableRow android:id="@+id/TableRow05"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="X Export..."
 android:paddingLeft="30dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
<TextView android:text="Ctr-E" 
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</TableRow>
<View android:id="@+id/View02"
 android:background="#0000aa"
 android:layout_height="3dip">
 </View>
 
<TableRow android:id="@+id/TableRow06"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
>
<TextView android:text="Quit"
 android:paddingLeft="60dip"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
</TextView>
</TableRow>

</TableLayout>


java文件:

package com.frame;

import android.app.Activity;
import android.os.Bundle;

public class TableLayoutActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
    }
}
--------------------------------------------
-----------FrameLayout------------
一次只能显示一个,否则会被覆盖。一般被用来制作动画效果(需要多张图片)
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp" />
    </LinearLayout>
</TabHost>
----------------
------------RelativeLayout--------------------
相对布局一般用的比较多,更容易控制组件的位置。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="Type here:"
 android:id="@+id/TextView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 </TextView>
<EditText android:id="@+id/EditText01"
  android:layout_height="wrap_content"
  android:hint="input message here"
  android:layout_width="fill_parent"
  android:layout_below="@+id/TextView01">
</EditText>

 <Button android:id="@+id/Button02"
  android:layout_alignParentRight="true"
  android:layout_height="wrap_content"
  android:text="OK"
  android:layout_marginLeft="5dip"
  android:layout_width="wrap_content"
  android:layout_below="@+id/EditText01">
 </Button>
<Button android:id="@+id/Button01"
 android:layout_height="wrap_content"
 android:text="Cancel"
 android:layout_width="wrap_content"
 android:layout_toLeftOf="@+id/Button02"
 android:layout_alignTop="@+id/Button02"
>
 </Button>
</RelativeLayout>

java处理文件:

package com.frame;

import android.app.Activity;
import android.os.Bundle;

public class RelativeLayoutActivity extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  this.setContentView(R.layout.relative);
 }

}
------------------------------------------
---------------gridview----------------
此种一般用于通过点击图标获得需要的页面,此布局给人视觉上更好的感受

<?xml version="1.0" encoding="utf-8"?>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/GridView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center">
</GridView>

java处理文件:

package com.frame;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class GridViewActivity extends Activity{

 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  this.setContentView(R.layout.gradeview);
  GridView gridview=(GridView)findViewById(R.id.GridView01);
  gridview.setAdapter(new ImageAdapter(this));
  gridview.setOnItemClickListener(new OnItemClickListener(){

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int position,
     long arg3) {
    // TODO Auto-generated method stub
    Toast.makeText(GridViewActivity.this, ""+position,Toast.LENGTH_SHORT).show();
   }
   
  });
 }
 class ImageAdapter extends BaseAdapter {
  Context mm;
  public ImageAdapter(GridViewActivity gridViewActivity) {
   // TODO Auto-generated constructor stub
   this.mm=gridViewActivity;
  }

  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   return images.length;
  }

  @Override
  public Object getItem(int position) {
   // TODO Auto-generated method stub
   return null;
  }

  @Override
  public long getItemId(int position) {
   // TODO Auto-generated method stub
   return 0;
  }

  // create a new ImageView for each item referenced by the Adapter
  public View getView(int position, View convertView, ViewGroup parent) {
   // TODO Auto-generated method stub
   ImageView imageView;
   if(convertView==null){
    imageView=new ImageView(mm);
    imageView.setLayoutParams(new GridView.LayoutParams(85,85));
    //Controls how the image should be resized or moved to match the size of this ImageView.
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    //设置图片距离周围的位置
    imageView.setPadding(8, 8, 8, 8);
   }
   else{
    imageView=(ImageView)convertView;
   }
   imageView.setImageResource(images[position]);
   return imageView;
  }
  private Integer[] images={
    R.drawable.icon,R.drawable.a3,
    R.drawable.female,R.drawable.fold,
    R.drawable.forward,R.drawable.fujian,
    R.drawable.male,R.drawable.shop
  };
  

 }


}

 

四.android连接服务器端的方式

//下面的这个程序是读取服务器端的文件,一般放在tomcat的web目录下找的对应的项目

package com.url;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ConnectionActivity extends Activity {
 TextView text;
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        text=(TextView)findViewById(R.id.hello);
        StringBuffer st=new StringBuffer();
        try {

//通过手机连接的本地地址是10.0.2.2,连接的服务器是tomcat,要先启动服务器才可以
   URL url=new URL("http://10.0.2.2:9090/AscentSys/index.jsp");
   HttpURLConnection con=(HttpURLConnection)url.openConnection();
   BufferedReader br=new BufferedReader(new InputStreamReader(con.getInputStream()));
   String line=null;
   int count=0;
   while((line=(br.readLine()))!=null && count<10){
    st.append(line);
   }
   text.setText(st.toString());
   br.close();
   con.disconnect();
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    }
}

五.android上传图片到Struts

android上传图片,一般需要从sd卡取出,或从data/data/下相应的文件读取,然后通过输出流写入到服务器,注意了,对于图片的上传,还要注意设置上传的方式如下:

(1)设置传递的方法:POST

 (2)内容形式Content-Type:multipart/form-data

 (3)连接的方式:("Connection", "Keep-Alive");

具体如下:

package com.ascent.uf;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.view.View.OnClickListener;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class UploadActivity extends Activity {
   
 
 private TextView alt;
 private ImageView img;
 private String uploadfilename;
 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
        uploadfilename=getFileName();
        alt.setOnClickListener(new TextViewListener());
    }
  public String getFileName() {
  // TODO Auto-generated method stub
  //String temp1=this.getString(R.drawable.icon);
  //File f=Environment.getExternalStorageDirectory();
  //String filepath=f.getPath()+"/tempdir/j2.gif";
  //uploadfilename=temp1.substring(temp1.lastIndexOf("/")+1,temp1.length());
  //return filepath;
   return Environment.getExternalStorageDirectory()+"/tempdir/j2.gif";
}
class TextViewListener implements OnClickListener {

  @Override
  public void onClick(View v) {
   // TODO Auto-generated method stub
   showAlertDialog();
  }
 }
   public void showAlertDialog() {
  // TODO Auto-generated method stub
  //创建AlertDialog
  AlertDialog.Builder alertdialog=new AlertDialog.Builder(this);
  //显示对话框信息(该对话框的作用)
  alertdialog.setMessage("你确定上传吗")
  //Sets whether the dialog is cancelable or not. Default is true.
  //设置对话框是否可以被取消,默认可以被取消
  .setCancelable(false)
  .setPositiveButton("YES", new DialogInterface.OnClickListener() {
  
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    uploadFileToServer();
   }

  
  })
 .setNegativeButton("NO", new DialogInterface.OnClickListener() {
 
  @Override
  public void onClick(DialogInterface dialog, int which) {
   // TODO Auto-generated method stub
   //返回到原页面下面两种方法都可以,关闭对话框返回到原页面
   //dialog.cancel();
   dialog.dismiss();
  }
 });
 AlertDialog alert=alertdialog.create();
 alert.show();
  }
   public void uploadFileToServer() {
  // TODO Auto-generated method stub
    System.out.println("上传文件");
    URL url = null;
    HttpURLConnection con = null;
    String end = "\r\n";
       String twoHyphens = "--";
       String boundary = "*****";
       DataOutputStream out = null;
       DataInputStream in = null;
  try {
   url = new URL("http://10.0.2.2:9090/ValidateProgram/upload.action");
   con = (HttpURLConnection) url.openConnection();
   /* 允许Input、Output,不使用Cache */
          con.setDoInput(true);
          con.setDoOutput(true);
          con.setUseCaches(false);
          /* 设置传送的method=POST */
          con.setRequestMethod("POST");
          /* setRequestProperty */
          con.setRequestProperty("Connection", "Keep-Alive");
          con.setRequestProperty("Charset", "UTF-8");
          con.setRequestProperty("Content-Type","multipart/form-data");
          /* 设置DataOutputStream */
          out=new DataOutputStream(con.getOutputStream());
//          out.writeBytes(twoHyphens + boundary + end);
//          out.writeBytes("Content-Disposition: form-data; " +
//                         "name=\"file1\";filename=\"" +
//                         uploadfilename +"\"" + end);
//          out.writeBytes(end);
          /* 取得文件的InputStream */
          //in= this.getResources().openRawResource(R.drawable.icon);
          in=new DataInputStream(new FileInputStream(uploadfilename));
          byte[] buffer=new byte[1024];
          int len=-1;
          while((len=in.read(buffer))!=-1){
           out.write(buffer, 0, len);
           out.flush();
          }
//          out.writeBytes(end);
//          out.writeBytes(twoHyphens + boundary + twoHyphens + end);
    
          //取得响应内容
          DataInputStream ins=new DataInputStream(con.getInputStream());
          int ch;
          buffer=new byte[1024];
          StringBuffer br=new StringBuffer();
          while((ch=ins.read(buffer))!=-1){
            br.append(new String(buffer,0,ch));
          }
          Toast.makeText(this,"上传文件成功!"+br.toString(),Toast.LENGTH_LONG).show();
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   in.close();
   out.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   /* 取得文件的FileInputStream */
       // FileInputStream fStream = new FileInputStream(uploadFile);
 }
 public void initView() {
  // TODO Auto-generated method stub
  alt=(TextView)findViewById(R.id.alt);
  img=(ImageView)findViewById(R.id.img);
 }
}

====================================================

Struts2关键代码如下:

android客户端传送过来的inputstream,需要先写入服务器或者硬盘,在进行读取传到数据库转化为blob类型数据

package com.android.action;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.struts2.ServletActionContext;

import com.ascent.dao.BlobPhotoDao;
import com.opensymphony.xwork2.ActionSupport;
import com.util.Employee;

public class AndroidFileUploadAction extends ActionSupport{

 public void androidFileUpload() throws Exception {
  // TODO Auto-generated method stub
  System.out.println("go into the server1111111111111111111111111111111!");
  HttpServletRequest req=ServletActionContext.getRequest();
  HttpServletResponse res=ServletActionContext.getResponse();
  String filepath=req.getSession().getServletContext().getRealPath("/upload");
  ServletInputStream in=req.getInputStream();
  File f=new File(filepath+"/1.gif");
  //把android端的图片写到服务器上
  FileOutputStream out=new FileOutputStream(f);
  byte[] buf=new byte[1024];
  int len;
  while((len=in.read(buf))>0){
   out.write(buf, 0, len);
   out.flush();
  }
  out.close();
  DataOutputStream ins=new DataOutputStream(res.getOutputStream());
  ins.writeBytes("success");
  ins.flush();
  ins.close();
  //把android中的图片写入到数据库表中
  FileInputStream infile=new FileInputStream(f);
  Employee ee=new Employee();
  if(new BlobPhotoDao().saveEmployee(ee,infile)){
   System.out.println("插入数据库图片成功!");
  }
  else{
   System.out.println("插入数据库图片失败");
  }
   }
 
}

==============================

blob数据在hibernate中的处理

package com.ascent.dao;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Blob;

import javax.servlet.ServletInputStream;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.util.Employee;
import com.util.HibernateSessionFactory;

public class BlobPhotoDao {
 private Session session;
 private Transaction ts;
 public boolean saveEmployee(Employee ee, FileInputStream inEmployee){
  session=HibernateSessionFactory.getSession();
  ts=session.beginTransaction();
  try {
   Blob blob=Hibernate.createBlob(inEmployee);
   ee.setName("bb");
   ee.setIcon(blob);
   System.out.println(ee.toString());
   session.save(ee);
   ts.commit();
   HibernateSessionFactory.closeSession();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   return false;
  }
  return true;
 
 }
}


 六.android显示图片

页面:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:src="@drawable/you"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
----------------------
java文件:

ackage com.android;

import android.app.Activity;
import android.os.Bundle;

public class ImageFrameLayout extends Activity{

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  this.setContentView(R.layout.framelayout);
 }

}

 

七.android页面分页的用法

该页面介绍ListView加载自定义适配器的用法,同时展示了如何通过web服务器传递过来的图片名和android进行匹配的问题。

注意checkbox和listview列表项单击会发生冲突,应先在页面设置checkbox的焦点为false.如:android:focusable="false",java类如下:

package com.sys;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.util.DataStatic;
import com.util.MySimpleAdapter;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

public class ProductActivity extends Activity{
 
 private ListView list;
 private List<HashMap<String, Object>> lisp=new ArrayList<HashMap<String,Object>>();
 private ArrayList<String> productname=null;;
 private URL url=null;
 private HttpURLConnection con=null;
 private ObjectInputStream in=null;
 protected Handler handler;
 HashMap<String, Object> map=null;
 public static final int pageSize=10;
 private int nowpage=1;
 Intent intent;
 Bundle bundle;
 MySimpleAdapter adapter;
 //购买的选项列表
 ArrayList<String> acheck;
 //获得分页的选项列表
 ArrayList<String> dcheck;
 //一页显示信息的条数
 ArrayList<String> pagelist;
 private int count=1;
 ArrayList<String> checkcop;
 //商品总数
 private int totalsize;
 //总页数
 private int totalpage;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.productlist);
  list=(ListView)findViewById(R.id.productname);
  intent=ProductActivity.this.getIntent();
  if(intent.hasExtra("Bundle")){
   bundle=intent.getBundleExtra("Bundle");
  }
  else{
   bundle=new Bundle();
  }
  productname=getProductList();
  totalsize=productname.size();
  //获得总页数
  totalpage=((totalsize%pageSize)==0)?(totalsize/pageSize):(totalsize/pageSize+1);
  //获得跳转时选择的页数
  if(intent.hasExtra("nowpage")){
   nowpage=intent.getIntExtra("nowpage", 0);
  }
  pagelist=getSmllPageList(nowpage);
  getListViewData(pagelist);
  System.out.println("datasource:234345"+lisp.size());
  adapter=new MySimpleAdapter(this,
    lisp,R.layout.product_item,
    new String[]{"num","img","title"},
    new int[]{R.id.num,R.id.img,R.id.title});
  list.setAdapter(adapter);
  list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
 
  //注意了,由于这里自定义的适配器中包含复选框,复选框会覆盖单击事件,一开始应设置(在xml布局文件)
  //其单击false,焦点false
  list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

   @Override
   public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
     int position, long arg3) {
    String listitem=productname.get((nowpage-1)*pageSize+position);
     bundle.putInt("position",(nowpage-1)*pageSize+position);
     bundle.putString("speP",listitem);
    intent.putExtra("Bundle", bundle);
    intent.setClass(ProductActivity.this, ProductListItem.class);
    ProductActivity.this.startActivity(intent);
    return true;
   }
  });
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  //菜单实例化
  MenuInflater inflater=this.getMenuInflater();
  inflater.inflate(R.menu.buyandcarlist, menu);
  return super.onCreateOptionsMenu(menu);
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
   case R.id.buyproduct:{
    if(!bundle.containsKey("acheck")){
     acheck=new ArrayList<String>() ;
    }
    else{
     acheck=bundle.getStringArrayList("acheck");
    }
    dcheck=(ArrayList<String>)adapter.cb;
    if(dcheck.size()<=0){
     Toast.makeText(ProductActivity.this,"您没有选择购买的产品",Toast.LENGTH_LONG).show();
    }
    else{
     for(int i=0;i<dcheck.size();i++){
      String ppp=dcheck.get(i);
      int pp=Integer.parseInt(ppp);
      String pid1=(String) lisp.get(pp).get("pid");
      for(int j=0;j<productname.size();j++){
       String pn[]=productname.get(j).split("aa_");
       String pid2=pn[0];
       if(pid1.equals(pid2)){
        if(!acheck.contains(pid1+"")){
         acheck.add(pid1+"");
        }
        bundle.putInt(pid1, bundle.getInt(pid1)+1);
        System.out.println("buy"+pid1+">>count: "+bundle.getInt(pid1));
        break;
       }
      }
     }
    }
    System.out.println("checked checkbox num:"+acheck.size());
    if(bundle.containsKey("carlistitem")){
      //考虑如果已经买过,获得原来买的集合,查看有没有重复,
      //如果有,数量加1,否则,在这个集合中添加新选项
      checkcop=bundle.getStringArrayList("carlistitem");
       for(int i=0;i<acheck.size();i++){
         if(!checkcop.contains(acheck.get(i))){
          checkcop.add(acheck.get(i));
            }
//         int post=Integer.parseInt(acheck.get(i));
//         String[] op=(productname.get(post)).split("aa_");
//         String pid=op[0];
//            bundle.putInt(pid, bundle.getInt(pid)+1);
        
       }
       bundle.putStringArrayList("carlistitem",checkcop);
       }
   else{
//    String p=null;
//    String pn[]=null;
//    for(int i=0;i<acheck.size();i++){
//     String po=acheck.get(i);
//     int pos=Integer.parseInt(po);
//     p=productname.get(pos);
//     pn=p.split("aa_");
     if((bundle.getInt(pn[0]))==0 || !bundle.containsKey(pn[0])){
      bundle.putInt(pn[0],1);
     }
     else{
//      bundle.putInt(pn[0], bundle.getInt(pn[0])+1);
//     //}
//    
//      }
    bundle.putStringArrayList("carlistitem",acheck);
    }
    bundle.putStringArrayList("productlistM",productname);
    bundle.remove("acheck");
    intent.putExtra("Bundle", bundle);
    break;
   }
   case R.id.lookcar:{
    intent.setClass(ProductActivity.this,CarListAll.class);
    ProductActivity.this.startActivity(intent);
    break;
   }
   case R.id.previous:
    if(nowpage==1){
     nowpage=1;
    }
    else{
     nowpage=nowpage-1;
    }
    pagelist=getSmllPageList(nowpage);
    if(!bundle.containsKey("acheck")){
     acheck=new ArrayList<String>() ;
    }
    else{
     acheck=bundle.getStringArrayList("acheck");
    }
    dcheck=(ArrayList<String>)adapter.cb;
    if(dcheck.size()>=0){
     for(int i=0;i<dcheck.size();i++){
      String ppp=dcheck.get(i);
      int pp=Integer.parseInt(ppp);
      String pid1=(String) lisp.get(pp).get("pid");
      for(int j=0;j<productname.size();j++){
       String pn[]=productname.get(j).split("aa_");
       String pid2=pn[0];
       if(pid1.equals(pid2)){
        acheck.add(pid1+"");
        bundle.putInt(pid1, bundle.getInt(pid1)+1);
        break;
       }
      }
     }
    }
    bundle.putStringArrayList("acheck",acheck);
    intent.putExtra("nowpage", nowpage);
    intent.putExtra("Bundle", bundle);
    intent.setClass(ProductActivity.this,ProductActivity.class);
    ProductActivity.this.startActivity(intent);
    break;
   case R.id.next:
    if(nowpage==totalpage){
     nowpage=totalpage;
    }
    else{
     nowpage=nowpage+1;
    }
    pagelist=getSmllPageList(nowpage);
    if(!bundle.containsKey("acheck")){
     acheck=new ArrayList<String>() ;
    }
    else{
     acheck=bundle.getStringArrayList("acheck");
    }
    dcheck=(ArrayList<String>)adapter.cb;
    if(dcheck.size()>=0){
     for(int i=0;i<dcheck.size();i++){
      String ppp=dcheck.get(i);
      int pp=Integer.parseInt(ppp);
      String pid1=(String) lisp.get(pp).get("pid");
      for(int j=0;j<productname.size();j++){
       String pn[]=productname.get(j).split("aa_");
       String pid2=pn[0];
       if(pid1.equals(pid2)){
        acheck.add(pid1+"");
        bundle.putInt(pid1, bundle.getInt(pid1)+1);
        break;
       }
      }
     }
    }
    bundle.putStringArrayList("acheck",acheck);
    intent.putExtra("nowpage", nowpage);
    intent.putExtra("Bundle", bundle);
    intent.setClass(ProductActivity.this,ProductActivity.class);
    ProductActivity.this.startActivity(intent);
    break;
   default:break;
  }
  return super.onOptionsItemSelected(item);
 }
 private ArrayList<String> getSmllPageList(int nowpage2) {
 
  pagelist=new ArrayList<String>();
  for(int j=(nowpage2-1)*pageSize;j<nowpage2*pageSize && j<totalsize ;j++){
   pagelist.add(productname.get(j));
  }
  return pagelist;
 
 }

 private void getListViewData(List<String> productname2) {
  // TODO Auto-generated method stub
  ImageView image=(ImageView)findViewById(R.id.img);
  ApplicationInfo appInfo = getApplicationInfo();
 
  for(int i=0;i<productname2.size();){
   map=new HashMap<String, Object>();
   String p=productname2.get(i);
   String pn[]=p.split("aa_");
   String pname=pn[1];
   String fname=null;
   if(pname!=null){
    fname=pname.substring(0, pname.lastIndexOf("."));
   }
   int resID = getResources().getIdentifier(fname, "drawable", appInfo.packageName);
   i++;
   map.put("pid", pn[0]);
   map.put("num",((nowpage-1)*pageSize+i)+". ");
   map.put("img",resID);
   map.put("title", pn[2]);
   lisp.add(map);
  }
 }
 @SuppressWarnings("unchecked")
 private ArrayList<String> getProductList() {
  // TODO Auto-generated method stub
  //productname=new ArrayList<String>();
  handler=new Handler();
  try {
   url=new URL(DataStatic.baseUrl+"/ProductListServlet");
   con=(HttpURLConnection) url.openConnection();
   in=new ObjectInputStream(con.getInputStream());
   //客户端无法法获得对象的集合
   //lisp=(List<Product>) in.readObject();
   productname=(ArrayList<String>) in.readObject();
   System.out.println("lisp  :"+productname);
   if(productname==null || productname.size()==0){
    handler.post(new Runnable(){

     @Override
     public void run() {
      // TODO Auto-generated method stub
      Toast.makeText(ProductActivity.this,"Product is null",Toast.LENGTH_SHORT).show();
     }
    
    });
   }
  
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return productname;
 }

}

 

八.Android中Intent与Bundle 在传值时有什么不同

/**
 * 测试android中直接用Intent传值与Bundle传值的区别
 *
 * 欢迎大家提问
 * by garretly
 * mail garretly@gmail.com
 */

 

前一阵子逛EOE 看有有人提问  Intent 和Bundle有什么样的区别

既然Intent可以传值 为什么还搞个Bundle来个传值出来


举个例子先  我现在要从A界面   跳转到B界面或者C界面  
这样的话 我就需要写2个Intent  如果你还要涉及的传值的话 你的Intent就要写两遍添加值的方法 那么 如果我用1个Bundle  直接把值先存里边 然后再存到Intent中 不就更简洁吗?

public class A extends Activity {
    private Button btn;
    private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
       
        btn = (Button) findViewById(R.id.btn1);
        tv =(TextView) findViewById(R.id.tv1);
       
        tv.setText("Activity----A");
       
        btn.setOnClickListener(new View.OnClickListener() {
  
   @Override
   public void onClick(View v) {
    next();
   
   }
  });
       
    }
    private void next(){
     Intent i  = new Intent();
     i.setClass(this, B.class);
     i.putExtra("int", 1000);
     i.putExtra("String", "测试");
     i.putExtra("char", 'c');
     startActivity(i);
     finish();
    }
   
}

 

public class B extends Activity {
 private Button btn;
 private TextView tv;

 int temp1;
 String temp2;
 char temp3;

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

  btn = (Button) findViewById(R.id.btn2);
  tv = (TextView) findViewById(R.id.tv2);

  getI(getIntent());

  /**
   * 说一下 这里为什么写View.OnClickListener()
   * 因为在调用OnClickListener()会有多种OnClickListener
   * ()对象,因此我在这里不通过导包来使用OnClickListener
   * ()对象,而是通过在对象前添加View来告知编译器我调用的是哪个OnClickListener()对象
   */
  btn.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    next();

   }
  });

 }

 // 获取从A中传来的数据
 private void getI(Intent i) {
  // int temp1 = i.getIntExtra("int", 0);
  // String temp2 = i.getStringExtra("String");
  // char temp3 = i.getCharExtra("char", 'a');
  temp1 = i.getIntExtra("int", 0);
  temp2 = i.getStringExtra("String");
  temp3 = i.getCharExtra("char", 'a');
  System.out.println(temp1);
  System.out.println(temp2);
  System.out.println(temp3);

  tv.setText("Activity----B" +"/n"+
    "int=======" + temp1 +"/n"+
    "String=======" + temp2+"/n"
    + "char========" + temp3);
 }

 /**
  * 现在要将从A中传过来的值 在传到C中去,那么 就要将temp1 temp2 temp3 改为全局变量 并且要填入一些B中的属性
  */
 private void next() {
  Intent i = new Intent();
  i.setClass(this, C.class);
  i.putExtra("int", temp1);
  i.putExtra("String", temp2);
  i.putExtra("char", temp3);
  // 同时我现在还要将B中的一些属性传给C
  i.putExtra("boolean", true);
  startActivity(i);
  finish();
 }

}

 

public class C extends Activity {
    private Button btn;
    private TextView tv;
   
    int temp1;
    String temp2;
    char temp3;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.c);
       
        btn = (Button) findViewById(R.id.btn3);
        tv =(TextView) findViewById(R.id.tv3);
        //getIntent()  是获取从哪里启动这个activity的Intent对象
        getI(getIntent());
       
       
        btn.setOnClickListener(new View.OnClickListener() {
  
   @Override
   public void onClick(View v) {
    next();
   
   }
  });
       
    }
    //获取从C中传来的数据
    private void getI(Intent i){
//     int temp1 = i.getIntExtra("int", 0);
//     String temp2 = i.getStringExtra("String");
//     char temp3 = i.getCharExtra("char", 'a');
     temp1 = i.getIntExtra("int", 0);
     temp2 = i.getStringExtra("String");
     temp3 = i.getCharExtra("char", 'a');
     boolean temp4 = i.getBooleanExtra("boolean", false);
     tv.setText("Activity----C"+"/n"+
       "int======="+temp1+"/n"+
       "String======="+temp2+"/n"+
       "char========"+temp3+"/n"+
       "boolean========"+temp4
     );
    }
   
    private void next(){
     Intent i  = new Intent();
     i.setClass(this, com.garretly.b.A.class);
     startActivity(i);
     Toast.makeText(getApplicationContext(), "测试Bundle", Toast.LENGTH_LONG).show();
     finish();
    }
   
}

另外一个例子  如果我现在有  Activity A ,B ,C;
现在我要把值通过A经过B传给C
你怎么传 如果用Intent的话   A-B先写一遍   再在B中都取出来 然后在把值塞到Intent中 再跳到C   累吗?
如果我在A中用了 Bundle 的话  我把Bundle传给B 在B中再转传到C  C就可以直接去了
这样的话 还有一个好处 就是在B中 还可以给Bundle对象添加新的 key - value  同样可以在C中取出来

 

 

public class A extends Activity {
 /**
  * 在这个类中我们来使用bundle进行传值
  */
    private Button btn;
    private TextView tv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);
       
        btn = (Button) findViewById(R.id.btn1);
        tv =(TextView) findViewById(R.id.tv1);
       
        tv.setText("Activity----A");
       
        btn.setOnClickListener(new View.OnClickListener() {
  
   @Override
   public void onClick(View v) {
    next();
   
   }
  });
       
    }
    private void next(){
     Intent i  = new Intent();
     Bundle b = new Bundle();
     i.setClass(this, B.class);
     b.putInt("int", 1000);
     b.putString("String", "测试");
     b.putChar("char", 'c');
     i.putExtras(b);
     startActivity(i);
     finish();
    }
   
}

 

public class B extends Activity {
 private Button btn;
 private TextView tv;
 Bundle b = new Bundle();
 int temp1;
 String temp2;
 char temp3;

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

  btn = (Button) findViewById(R.id.btn2);
  tv = (TextView) findViewById(R.id.tv2);

  getI(getIntent());

  /**
   * 说一下 这里为什么写View.OnClickListener()
   * 因为在调用OnClickListener()会有多种OnClickListener
   * ()对象,因此我在这里不通过导包来使用OnClickListener
   * ()对象,而是通过在对象前添加View来告知编译器我调用的是哪个OnClickListener()对象
   */
  btn.setOnClickListener(new View.OnClickListener() {

   @Override
   public void onClick(View v) {
    next();

   }
  });

 }

 // 直接用bundle获取从A中传来的数据
 private void getI(Intent i) {
  b = i.getExtras();
  temp1 = b.getInt("int", 0);
  temp2 = b.getString("String");
  temp3 = b.getChar("char", 'a');

  tv.setText("Activity----B" +"/n"+ "int=======" + temp1 +"/n"+ "String======="
    + temp2 +"/n"+ "char========" + temp3);
 }

 /**
  * 现在要将从A中传过来的值 在传到C中去,那么 就要将temp1 temp2 temp3 改为全局变量
  * 并且要填入一些B中的属性
  *
  * 我们这次直接用bundle来做
  */
 private void next() {
  Intent i = new Intent();
  i.setClass(this, C.class);
  b.putBoolean("boolean", true);
  i.putExtras(b);
  //这里在做一个测试 就是将从A过来的B放在Intent中来传递
  i.putExtra("Bundle", b);
  startActivity(i);
  finish();
 }

}

 

 

 

public class C extends Activity {
    private Button btn;
    private TextView tv;
   
    int temp1;
    String temp2;
    char temp3;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.c);
       
        btn = (Button) findViewById(R.id.btn3);
        tv =(TextView) findViewById(R.id.tv3);
        //getIntent()  是获取从哪里启动这个activity的Intent对象
        getI(getIntent());
       
        btn.setText("结束测试");
        btn.setOnClickListener(new View.OnClickListener() {
  
   @Override
   public void onClick(View v) {
    next();
   
   }
  });
       
    }
    //获取从C中传来的数据
    private void getI(Intent i){
     Bundle b = new Bundle();
     b = i.getExtras();
     Bundle b2 = i.getBundleExtra("Bundle");
     temp1 = b.getInt("int", 0);
     temp2 = b.getString("String");
     temp3 = b.getChar("char", 'a');
     boolean temp4 = b.getBoolean("boolean", false);
     tv.setText("Activity----C"+"/n"+
       "int======="+temp1+"/n"+
       "String======="+temp2+"/n"+
       "char========"+temp3+"/n"+
       "boolean========"+temp4+"/n"+
       "b2=============="+b2.toString()//b2 中的数据就不再取出来了 大家可以明白什么意思 但是获取到的是他的大小 这个还得看底层代码
     );
    }
   
    private void next(){
     Toast.makeText(this, "测试结束", Toast.LENGTH_LONG).show();
     finish();
    }
   
}

 

九.ArrayAdapter_SimpleAdapter_CursorAdapter的区别

数据源不同而已
1. String[]: ArrayAdapter
2. List<Map<String,?>>: SimpleAdapter
3. 数据库Cursor: SimpleCursorAdapter

使用ArrayAdapter(数组适配器)顾名思义,需要把数据放入一个数组以便显示。
android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字

SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)

//=============================SimpleAdapter==========================

public class List3 extends ListActivity {  
      
    List<Map<String, Object>> list;  
   
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
         
       list = getListForSimpleAdapter(); //list为数据集合
   
       SimpleAdapter     adapter = new SimpleAdapter(this, list,  
R.layout.item,  
       new String[] { "BigText", "LittleText", "img" },   
new int[] { R.id.BigText,R.id.LittleText, R.id.img }); 

        //可以想成把一个放好数据的布局文件放入本界面中  
       setListAdapter(adapter);      
   
    }  
   
    private List<Map<String, Object>> getListForSimpleAdapter() {  
    List<Map<String,Object>> list=newArrayList<Map<String,        Object>>(3);  
           Map<String, Object> map = new HashMap<String, Object>();  
           map.put("BigText", "Android");  
           map.put("LittleText", "Google phone.");  
           map.put("img", R.drawable.n);  
           list.add(map);  
   
           map = new HashMap<String, Object>();  
           map.put("BigText", "Lenovo");  
           map.put("LittleText", "Ophone");  
           map.put("img", R.drawable.o);  
           list.add(map);  
   
           map = new HashMap<String, Object>();  
           map.put("BigText", "Droid");  
           map.put("LittleText", "Motorola");  
           map.put("img", R.drawable.droid);  
           list.add(map);  
   
         
       return list;  
    }  
}  

//==============================SimpleCursorAdapter===================

注意:SimpleCursorAdapter是和数据库有关的东西,而sqlite数据库所要求的 自动增长的 id  必须是 _id这中形式

public class List2 extends Activity {  
      
    private ListView listView;  
    @Override 
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
   
        listView=new ListView(this);  
       Cursorc=getContentResolver().query(People.CONTENT_URI,  
       null, null, null, null);        
        startManagingCursor(c);  
   
        ListAdapter adapter = new SimpleCursorAdapter(this,   
                 android.R.layout.simple_list_item_1,  
                 c,   
                 new String[] {People.NAME} ,  
                 new int[] {android.R.id.text1});   
        listView.setAdapter(adapter);  
setContentView(listView);  
}  

//====================ArrayAdapter===================================

public class List1 extends  Activity {  
   
    private ListVeiw listView;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   
       listView=new ListVeiw(this);  
       listView.setAdapter(new ArrayAdapter<String>(this,  
           android.R.layout.simple_list_item_1, mStrings));  
      setContentVieww(listView);  
        }  
   
   private String[] mStrings = {  
           "Abbaye de Belloc", "Abbaye du Mont des Cats",      
           "Acorn", "Adelost", "Affidelice au Chablis",   
           "Aisy Cendre", "Allgauer Emmentaler", "Alverca",   
           "Ami du Chambertin", "Anejo Enchilado", "Anneau   
           "Aragon", "Ardi Gasna", "Ardrahan", "Armenian   
           "Asadero", "Asiago", "Aubisque Pyrenees", "Autun",   
            "Babybel", "Baguette Laonnaise", "Bakers", "Bal"};  

 

十.ListView方法总结

数据源不同而已
1. String[]: ArrayAdapter
2. List<Map<String,?>>: SimpleAdapter
3. 数据库Cursor: SimpleCursorAdapter

使用ArrayAdapter(数组适配器)顾名思义,需要把数据放入一个数组以便显示。
android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字

SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)

//=============================SimpleAdapter==========================

public class List3 extends ListActivity {  
      
    List<Map<String, Object>> list;  
   
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
         
       list = getListForSimpleAdapter(); //list为数据集合
   
       SimpleAdapter     adapter = new SimpleAdapter(this, list,  
R.layout.item,  
       new String[] { "BigText", "LittleText", "img" },   
new int[] { R.id.BigText,R.id.LittleText, R.id.img }); 

        //可以想成把一个放好数据的布局文件放入本界面中  
       setListAdapter(adapter);      
   
    }  
   
    private List<Map<String, Object>> getListForSimpleAdapter() {  
    List<Map<String,Object>> list=newArrayList<Map<String,        Object>>(3);  
           Map<String, Object> map = new HashMap<String, Object>();  
           map.put("BigText", "Android");  
           map.put("LittleText", "Google phone.");  
           map.put("img", R.drawable.n);  
           list.add(map);  
   
           map = new HashMap<String, Object>();  
           map.put("BigText", "Lenovo");  
           map.put("LittleText", "Ophone");  
           map.put("img", R.drawable.o);  
           list.add(map);  
   
           map = new HashMap<String, Object>();  
           map.put("BigText", "Droid");  
           map.put("LittleText", "Motorola");  
           map.put("img", R.drawable.droid);  
           list.add(map);  
   
         
       return list;  
    }  
}  

//==============================SimpleCursorAdapter===================

注意:SimpleCursorAdapter是和数据库有关的东西,而sqlite数据库所要求的 自动增长的 id  必须是 _id这中形式

public class List2 extends Activity {  
      
    private ListView listView;  
    @Override 
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
   
        listView=new ListView(this);  
       Cursorc=getContentResolver().query(People.CONTENT_URI,  
       null, null, null, null);        
        startManagingCursor(c);  
   
        ListAdapter adapter = new SimpleCursorAdapter(this,   
                 android.R.layout.simple_list_item_1,  
                 c,   
                 new String[] {People.NAME} ,  
                 new int[] {android.R.id.text1});   
        listView.setAdapter(adapter);  
setContentView(listView);  
}  

//====================ArrayAdapter===================================

public class List1 extends  Activity {  
   
    private ListVeiw listView;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
   super.onCreate(savedInstanceState);  
   
       listView=new ListVeiw(this);  
       listView.setAdapter(new ArrayAdapter<String>(this,  
           android.R.layout.simple_list_item_1, mStrings));  
      setContentVieww(listView);  
        }  
   
   private String[] mStrings = {  
           "Abbaye de Belloc", "Abbaye du Mont des Cats",      
           "Acorn", "Adelost", "Affidelice au Chablis",   
           "Aisy Cendre", "Allgauer Emmentaler", "Alverca",   
           "Ami du Chambertin", "Anejo Enchilado", "Anneau   
           "Aragon", "Ardi Gasna", "Ardrahan", "Armenian   
           "Asadero", "Asiago", "Aubisque Pyrenees", "Autun",   
            "Babybel", "Baguette Laonnaise", "Bakers", "Bal"};  

 

十一.Spinner的用法

十二.向sd卡写数据的方式

main.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
</LinearLayout>

-----
package com.sd;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;

public class UrlDownActivity extends Activity {
 public  static final int DOWN=1;
 public static final int EXIT=2;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
    }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  menu.add(1, DOWN, 1, "下载文件");
  menu.add(2, EXIT, 2, "退出");
  return super.onCreateOptionsMenu(menu);
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case DOWN:
   downLoadFile("http://10.0.2.2:9090/AscentSys/aa.txt");
   break;
  case EXIT:
   this.finish();
   break;
  default:break;
  }
  return super.onOptionsItemSelected(item);
 }

 private void downLoadFile(String filepath) {
  // TODO Auto-generated method stub
  URL url;
  InputStream is = null;
  FileOutputStream out = null;
  try {
   url=new URL(filepath);
   System.out.println(url);
   HttpURLConnection con=(HttpURLConnection) url.openConnection();
   is=con.getInputStream();
   out=new FileOutputStream(Environment.getExternalStorageDirectory()+"/try.xml");
   byte[] buffer=new byte[is.available()];
   int readbyte=0;
   while((is.read(buffer))!=-1){
    out.write(buffer);
   }
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  try {
   out.flush();
   out.close();
   is.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  
 }
   
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值