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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值