我有一个设置参数的fragment。想做成,当打开这个fragment的时候,里面的EnitText是不可编辑的(creat中代码设置)。点击这个EnitText或者一个按钮,这个EnitText变为可编辑状态。可却始终无法编辑。
各位前辈们帮帮看下,为什么。代码如下
public class SettingFragment extends Fragment {
EditText ip;
Button editIp;
SharedPreferences config;
@Override
public void onCreate(Bundle savedInstanceState) {
config = this.getActivity().getSharedPreferences("config", Context.MODE_PRIVATE);
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.common_setting_frag, container, false);
ip = (EditText)view.findViewById(R.id.common_function_etSetIp);
editIp = (Button) view.findViewById(R.id.common_function_btnSetIp);
String ipConfig = config.getString("ServerAddress", "");
if("".equals(ipConfig)){
ip.setHint("请输入服务器IP地址");
}else{
ip.setFocusable(false);
ip.setText(Regex.returnIp(ipConfig)[0]);
ip.setTextColor(this.getResources().getColor(R.color.gray));
}
editIp.setText("编辑");
ip.setOnClickListener(etListener);
editIp.setOnClickListener(btnListener);
return view;
}
@Override
public void onDestroy() {
super.onDestroy();
}
OnClickListener btnListener = new OnClickListener(){
public void onClick(View v) {
if(ip.isFocusable()){
String ipString = ip.getText().toString();
if(Regex.isIp(ipString)){
Editor editor = config.edit();
editor.putString("ServerAddress", "http://" + ipString + "/Czp/services/");
editor.commit();
ip.setFocusable(false);
ip.setTextColor(getResources().getColor(R.color.gray));
editIp.setText("编辑");
}else{
Toast.makeText(getActivity(), "IP输入格式不对", Toast.LENGTH_SHORT).show();
}
}else{
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
}
}
};
OnClickListener etListener = new OnClickListener() {
public void onClick(View v) {
if(!ip.isFocusable()){
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");
}
}
};
}
布局文件如下:
<?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"
android:background="@drawable/background_common"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/common_function_etSetIp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
>
</EditText>
<Button
android:id="@+id/common_function_btnSetIp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="4"
style="@style/style_button"
/>
</LinearLayout>
</LinearLayout>
我看过好几遍,逻辑上似乎并没有问题。可是就是无法编辑。
------解决方案--------------------
你试下设置enable为true
------解决方案--------------------
用setFocusable(false)不成,要用requestFocus();
要请求焦点,而不是设置焦点
------解决方案--------------------
ip.setFocusable(false);
无法获取焦点,如何能出发按钮单击事件
点击按钮应该执行
ip.setFocusable(true);
ip.setTextColor(getResources().getColor(R.color.black));
editIp.setText("保存");