【发布时间】:2014-03-31 17:18:05
【问题描述】:
这里是新程序员。我希望屏幕上的“添加”按钮仅在所有字段均非空时启用。但是,添加 TextWatcher 会导致屏幕崩溃。在其他地方询问,似乎我不应该尝试在我的 ContentView 设置为 activity_add_grade 的情况下访问我的 EditText。但我需要帮助来了解正确的做事方式。
我遵循的模板/教程让我为每个活动创建 2 个 xml 文件。如下所示,我的 AddClass 将 contentView 设置为 activity_add_grade,然后膨胀 fragment_add_grade,这是我的屏幕设计和视图所在的位置。所以从 onCreate 访问我的 EditText 视图的问题是我的 ContentView 没有设置为包含视图的 xml。那么我应该在哪里设置我的听众呢?为什么还有两个xml?我想了解更多并遵循最佳实践。谢谢!
AddClass -- 相关活动的 java
public class AddClass extends ActionBarActivity {
DBAdapter db = new DBAdapter(this);
private EditText editText1;
private EditText editText2;
public TextWatcher watcher = new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
checkFieldsForEmptyValues();
}
@Override
public void afterTextChanged(Editable editable) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_grade);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
// setContentView(R.layout.fragment_add_grade); //Tried this. Doesn't work
editText1 = (EditText)findViewById(R.id.editTitle);
editText2 = (EditText)findViewById(R.id.editCredit);
editText1.addTextChangedListener(watcher);
editText2.addTextChangedListener(watcher);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.add_grade, menu);
//Code here for spinners on screen. Removed for space
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void checkFieldsForEmptyValues() {
Button b = (Button)findViewById(R.id.addClassButton);
System.out.println("in the check fields thing");
String s1 = editText1.getText().toString();
String s2 = editText2.getText().toString();
if(s1.isEmpty() || s2.isEmpty()) {
b.setEnabled(false);
} else {
b.setEnabled(true);
}
}
// THIS WORKS -- the method is bigger, but I shortened it for space.
public void createNewClass(View v) {
EditText titleTxt = (EditText)findViewById(R.id.editTitle);
//ToStrings
String titleStr = titleTxt.getText().toString();
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_add_grade,
container, false);
return rootView;
}
}
【问题讨论】:
标签: java android android-layout android-fragments textwatcher