我正在构建一个Android应用程序,我需要获取用户输入以在配置文件中存储常规设置。其中一个设置是服务器IP地址。
我设计了一个与XML布局文件fragment_serverip.xml相关联的片段布局(单独的ServerIPfragment.java文件),其中包含两个EditText来捕获服务器IP和端口号。还有两个按钮可以保存或取消输入。
保存按钮执行以下操作,并在MainActivity.java中定义saveServerIP功能:
public void saveServerIP(View v) {
String serverIP = "123.123.123.123";//this works and pops up the Toast msg
String serverIP etServerIP.getText().toString();// this crashes the app
if (MyIpMatch.isValidIP(serverIP)) {
Toast.makeText(getBaseContext(), "IP address is valid!", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getBaseContext(), "IP address is not valid!", Toast.LENGTH_LONG).show();
}
我在MainActivity.java中构建对EditText的引用,如下所示:
public class MainActivity extends ActionBarActivity {
EditText etServerIP;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get reference to the views
etServerIP = (EditText) findViewById(R.id.fieldServerIP);
}
然后我通过菜单选项进入片段视图,如下所示:
if (id == R.id.action_changeIP) {
setContentView(R.layout.fragment_serverip);
一旦我更新EditText fieldServerIP并单击Save按钮,如果我使用固定字符串,代码就可以正常工作但我似乎无法获取EditText的内容以在ip验证器中使用它。
ip验证器也在MainActivity文件中
我做错了什么?如何将片段中的EditText内容存储到String变量中,以便将其传递给MainActivity.java中的ip验证器代码?
答案 0 :(得分:0)
我没有使用听众就让它工作了。不确定这是正确的方法,但它有效...随意评论我实施片段的任何风险......
右键单击主活动java文件以添加片段(不在我读过的文件夹上)
在主要活动XML文件
中输入以下条目
请注意,如果我没有将片段封装在FrameLayout中,它会崩溃 - 原因可能是java专家很明显,但对于我在Java编码中的新手来说并不明显。
我没有对步骤1中生成的Java文件进行任何更改
设计片段的布局
按如下方式调用片段视图 - 我在MainActivity的菜单选项中执行了该操作:
@覆盖
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.action_changeIP) {
//
setContentView(R.layout.fragment_server_setup);
return true;
我的布局有2个EditText字段和一个“保存”按钮
在主活动中定义一个saveSettings函数,并将其附加到按钮的onClick事件中,类似于(抱歉无法使代码格式化工作......):
public void saveServerIP(View v){
etServerIP =(EditText)findViewById(R.id.fieldServerIP);
if(MainActivity.MyIpMatch.isValidIP(etServerIP.getText()。toString())){
Toast.makeText(getBaseContext(),“IP有效!”,Toast.LENGTH_LONG)。show();
setContentView(R.layout.activity_main);
} else { Toast.makeText(getBaseContext(),“IP无效!”,Toast.LENGTH_LONG)。show(); } }
请注意,我首先设置了对EditText的引用,然后在ip验证器中使用该引用,以便能够使用getText()。
成功,应用程序不会崩溃并弹出Toast消息。这应该意味着我可以做任何我需要做的片段元素。
我确实有一个问题:一旦我切换回主活动布局,我在那里定义的按钮不再立即工作,即它应该触发的HTTP请求是机器人工作几分钟。如果我重新启动应用程序,它将立即再次运行。知道可能导致这种情况的原因吗?我是否需要添加一些代码才能在视图之间进行干净的切换?