zoukankan      html  css  js  c++  java
  • Android学习--写一个发送短信的apk,注意布局文件的处理过程!!!

    刚开始写Android程序如图发现使用了findViewById方法之后输出的话居然是null(空指针错误),也就是说这个方法没有成功。网上说这样写是在activity_main .xml去找这个ID所代表的控件,而现在使用的ADT在layout下除了activity_main .xml还多生成了一个fragment_main.xml。我就是把控件写在了后一个布局文件中。想请问下,使用什么样的方法是在fragment_main.xml去寻找控件呢?

    回答:在PlaceHolderFragment的onCreateView里面初始化textView.

    http://bbs.csdn.net/topics/390740123?page=1#post-397370237这个帖子写的特好,大拇指竖起来!

      1 package com.example.sms;
      2 
      3 import java.util.ArrayList;
      4 
      5 import android.support.v7.app.ActionBarActivity;
      6 import android.support.v7.app.ActionBar;
      7 import android.support.v4.app.Fragment;
      8 import android.telephony.SmsManager;
      9 import android.os.Bundle;
     10 import android.view.LayoutInflater;
     11 import android.view.Menu;
     12 import android.view.MenuItem;
     13 import android.view.View;
     14 import android.view.ViewGroup;
     15 import android.widget.EditText;
     16 import android.widget.Toast;
     17 import android.os.Build;
     18 
     19 public class MainActivity extends ActionBarActivity {
     20     
     21     static EditText mETNumber;
     22     static EditText mETContent;
     23 
     24     @Override
     25     protected void onCreate(Bundle savedInstanceState) {
     26         super.onCreate(savedInstanceState);
     27         setContentView(R.layout.activity_main);
     28 
     29         if (savedInstanceState == null) {
     30             getSupportFragmentManager().beginTransaction()
     31                     .add(R.id.container, new PlaceholderFragment()).commit();
     32         }
     33     }
     34 
     35     
     36     
     37     @Override
     38     public boolean onCreateOptionsMenu(Menu menu) {
     39 
     40         // Inflate the menu; this adds items to the action bar if it is present.
     41         getMenuInflater().inflate(R.menu.main, menu);
     42         return true;
     43     }
     44     
     45     
     46     
     47     
     48 
     49     @Override
     50     public boolean onOptionsItemSelected(MenuItem item) {
     51         // Handle action bar item clicks here. The action bar will
     52         // automatically handle clicks on the Home/Up button, so long
     53         // as you specify a parent activity in AndroidManifest.xml.
     54         int id = item.getItemId();
     55         if (id == R.id.action_settings) {
     56             return true;
     57         }
     58         return super.onOptionsItemSelected(item);
     59     }
     60 
     61     
     62     
     63     
     64     /**
     65      * A placeholder fragment containing a simple view.
     66      */
     67     public static class PlaceholderFragment extends Fragment {
     68 
     69         public PlaceholderFragment() {
     70         }
     71 
     72         @Override
     73         public View onCreateView(LayoutInflater inflater, ViewGroup container,
     74                 Bundle savedInstanceState) {
     75             View rootView = inflater.inflate(R.layout.fragment_main, container,
     76                     false);
     77             
     78             //由于在fragment_main里面定义了,因此需要在这里定义
     79             mETNumber =(EditText) rootView.findViewById(R.id.et_number);
     80             mETContent = (EditText) rootView.findViewById(R.id.et_content);
     81             
     82             
     83             return rootView;
     84         }
     85     }
     86 
     87     public void send(View v){
     88     String number = mETNumber.getText().toString().trim();
     89     String content = mETContent.getText().toString().trim();
     90         
     91     if("".equals(number)||"".equals(content)){
     92         Toast.makeText(this, R.string.error_message, Toast.LENGTH_LONG).show();//添加show才可以显示出来
     93     }else{
     94         //这是发送一条常规短信的写法
     95         //SmsManager.getDefault().sendTextMessage(number, null, content, null, null); //需要授权,请注意添加
     96         //Toast.makeText(this,R.string.success_message, Toast.LENGTH_LONG).show();
     97         SmsManager smsmanager = SmsManager.getDefault();
     98         ArrayList<String> messages = smsmanager.divideMessage(content);//ArrayList是个集合,里面的类型是String类型的,这是根据dividemessage的补充说明添加的
     99         for(String message:messages){
    100             smsmanager.sendTextMessage(number, null, message, null, null);
    101             
    102         }
    103         
    104     }
    105 }}

    过去没有fragment_main.xml的时候,在onCreate()方法里面可以随便写code;现在经过试验,还是在fragment里面布局,方便拖动,写code时候找到OnCreateView()方法,在里面写写就OK啦。。。

    另外一个收获是,apk中涉及走流量或者花钱的,需要授权,直接在menifest里面授权即可。

  • 相关阅读:
    HashMap
    Java内部类应用——静态内部类
    transient关键字和@Transient 注解
    java基本数据类型传递与引用传递区别
    抽象类
    java collection-list详解
    Arrays,ArrayList,以及ArrayList源码分析
    【转载】【剑指offer】面试题40:最小的 k 个数中的优先级队列
    java stack总结
    java Queue
  • 原文地址:https://www.cnblogs.com/ianthe/p/3723953.html
Copyright © 2011-2022 走看看