当前位置:  编程技术>移动开发
本页文章导读:
    ▪ListView 与EditText共存的焦点有关问题        ListView 与EditText共存的焦点问题        这里要实现的功能是文件管理器中的重命名,根据选择的文件名,进入到重命名对话框。用ListView存放所有的文件名,EditText来书写新的文件名,然后.........
    ▪ 腕表样式的时间并且时间是变化的        手表样式的时间并且时间是变化的 效果显示图如下          定义一个Activity package cn.mw.com;   import java.text.SimpleDateFormat;  import java.util.Calendar;   import android.app.Activity; import android.os.Bundle; imp.........
    ▪ Handler 消息传递机制引见       Handler 消息传递机制介绍 好久没有碰Android了,现在由于项目需要,重拾Android。。。下面介绍一下Android中的Handler消息传递机制。在Android平台中,新启动的线程是无法访问Activity中的Widget,.........

[1]ListView 与EditText共存的焦点有关问题
    来源: 互联网  发布时间: 2014-02-18
ListView 与EditText共存的焦点问题

        这里要实现的功能是文件管理器中的重命名,根据选择的文件名,进入到重命名对话框。用ListView存放所有的文件名,EditText来书写新的文件名,然后保存。

      首先,这里需要自定义ListView适配器,继承baseAdapter,重写getView()方法,该方法在列表视图上的任何操作都会让它执行。

     下面是getView的方法内容

 RenameHolder holder = null;

if (view == null) 

holder = new RenameHolder(); 
if (view == null) 

view = inflater.inflate(R.layout.rename_data, null); 

holder.tv = (TextView) view.findViewById(R.id.name); 
holder.et = (EditText) view.findViewById(R.id.edit); 
view.setTag(holder); 

else
{
holder=(RenameHolder)view.getTag();  
}


HashMap<String, String> map = list.get(position); 
if (map != null) 

itemString = (String) map.get(keyString[0]); 
holder.tv.setText(itemString); 
holder.et.setText(isSelected.get(position));

holder.et.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
EditText EditText = (EditText)v;
newname[pos] = EditText.getText().toString().trim();
//System.out.println(pos + "------" + newname[pos]);
return false;
}
});
return view; 
}

          而关键是点击焦点的时候,如果EditText设置了android:focusable="false",android:focusableInTouchMode="false",android:clickable="false"

       你是无法获取到EditText的焦点的,因为此时ListView会优先控制,我需要在ListView中的setOnItemClickListener方法中,获取到你当前选中的是第几项,然后将焦点切换到EditText中,

将LayoutInflater转化到Listview.xml中,获取到ListView控件,

LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.rename,(ViewGroup) findViewById(R.id.dialog));
Renamelistdata = (ListView)view.findViewById(R.id.ListView);

       而在Activity界面想要获取到EditText控件,

RenameHolder holder = (RenameHolder) view.getTag(); 这步很关键,获取到EditText界面的View
holder.et.setFocusable(true);
holder.et.setFocusableInTouchMode(true);
holder.et.setClickable(true);
holder.et.requestFocus();

       监听EditText键盘输入事件,getText(),得到新的文件名,最后通过file.rename(File file)方法重命名文件。

       这里仍有一个小问题,点击ListView然后将焦点切换到EditText是无奈之举,因为我需要知道当前点击的是listView中的第几项,而不知道有没有方法可以将焦点直接放在EditText中,从而能知道当前点击的是第几项,有没有什么寻找父控件的方法,求指教!!




    
[2] 腕表样式的时间并且时间是变化的
    来源: 互联网  发布时间: 2014-02-18
手表样式的时间并且时间是变化的

效果显示图如下

  

 

 

 

定义一个Activity

package cn.mw.com;

 

import java.text.SimpleDateFormat; 

import java.util.Calendar;

 

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.AnalogClock;

import android.widget.DigitalClock;

import android.widget.TextView;

 

public class EX02_01Activity extends Activity {

    // 声明两个widget对象

    private static AnalogClock ac;

    private DigitalClock dc;

    private TextView mTextView;

    // 声明一常数作为判别信息用

    protected static final int GUINOTIFIER = 0x1234;

    // 声明与时间相关的变量

    public Calendar mCalendar;

    public int mMinutes;

    public int mHour;

    private int msecond;

 

    // 声明关键 Handler 与Thread 变量

    public Handler mHandler;

    private Thread mClockThread;

 

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

       mTextView = (TextView) findViewById(R.id.tv1);

       ac = (AnalogClock) findViewById(R.id.anclock);

       dc = (DigitalClock) findViewById(R.id.digitalclock01);

       mHandler = new Handler() {

           public void handleMessage(Message msg) {

              // 这里是处理信息的方法

              switch (msg.what) {

              case EX02_01Activity.GUINOTIFIER:

 

                  // 在这里处理TextView对象show时间事件

 

                  mTextView.setText(mHour + " : " + mMinutes);

                  break;

              }

              super.handleMessage(msg);

           }

       };

       /*

        * 通过进程来持续取得系统时间

        */mClockThread = new LooperThread();

       mClockThread.start();

    }

 

    // 改写一个Thread Class 用来持续取得系统时间

    class LooperThread extends Thread {

       public void run() {

           super.run();

           try {

              do {

 

                  // 取得系统时间

                  long time = System.currentTimeMillis();

                  /* 通过Calendar 对象来取得小时与分钟 */

                  final Calendar mCalendar = Calendar.getInstance();

                  mCalendar.setTimeInMillis(time);

                  mHour = mCalendar.get(Calendar.HOUR);

                  mMinutes = mCalendar.get(Calendar.MINUTE);

                  msecond = mCalendar.get(Calendar.MINUTE);

                  // 让进程休息一秒

                  Thread.sleep(1000);

                  Message m = new Message();

                  m.what = EX02_01Activity.GUINOTIFIER;

                  EX02_01Activity.this.mHandler.sendMessage(m);

              } while (EX02_01Activity.LooperThread.interrupted() == false);

              // 当系统发出中断信息后停止本次循环

           } catch (Exception e) {

              e.printStackTrace();

           }

       }

    }

}

main.xml

 

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

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

    <AnalogClock
        android:id="@+id/anclock"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <DigitalClock
        android:id="@+id/digitalclock01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>


    
[3] Handler 消息传递机制引见
    来源: 互联网  发布时间: 2014-02-18
Handler 消息传递机制介绍
好久没有碰Android了,现在由于项目需要,重拾Android。。。
下面介绍一下Android中的Handler消息传递机制。
在Android平台中,新启动的线程是无法访问Activity中的Widget,也不能把运行状态外送出来,这种就需要Handler机制进行消息的传递了。Handler类位于android.os包下,功能是完成Activity的Widget与应用程序中线程之间的交互。
Handler中的主要方法:
public void handleMessage(Message msg) //子类对象通过该方法接收信息
public final boolean sendEmptyMessage(int what) //发送一个只包含what值的消息
public final boolean sendMessage(Message msg) //发送消息到Handler,通过handlerMessage方法接收
public final boolean hasMessage(int what) //监测消息队列中是否还有what值的消息
public final boolean post(Runnable r) //将一个线程添加到消息队列

开发带有Handler类的程序步骤:
1、在Activity或Activity的Widget中开发Handler类的对象,并重写handlerMessage方法;
2、在新启动的线程中调用sendEmptyMessage或者sendMessage方法向Handler发送消息;
3、Handler类的对象用handlerMessage方法接收消息,然后根据消息的不同执行不同的操作。
具体的请参考:
http://www1.huachu.com.cn/read/readbookinfo.asp?sectionid=1000005087

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
java/j2ee iis7站长之家
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3