Я создал всплывающее меню из панели навигации, и все работает в отношении реального всплывающего окна. Тем не менее, у меня есть EditText во всплывающем окне, и я хотел бы, чтобы пользователь вводил в него текст, а затем нажимал кнопку, чтобы выполнять другие действия. Моя проблема в том, что когда я присваиваю значение EditText.getText (). ToString () строковой переменной в функции, строковая переменная все еще пуста, и когда я проверяю, является ли EditText.getText (). ToString () пустым, это не пусто. Поэтому я не понимаю, как присвоение строковой переменной все еще возвращает пустую строку в переменной. Я действительно новичок в программировании Android, поэтому любые советы будут оценены. Спасибо.
Фрагмент метода onCreate
public class workouts extends AppCompatActivity {
private ActionBarDrawerToggle mToggle;
private static final String TAG = "Workouts";
private ExpandableListView listView;
private ExpandableListAdapter listAdapter;
private List<String> listHeader;
private HashMap<String, List<String>> listHashMap;
// Pop up menu variables
private EditText categoryTitle;
private Dialog myDialog;
private String headerTitle = "";
private boolean validTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_workouts);
DrawerLayout mDrawerLayout = findViewById(R.id.drawer);
mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open,R.string.close);
mDrawerLayout.addDrawerListener(mToggle);
mToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
final NavigationView navigationView = (NavigationView)findViewById(R.id.navigationView);
listView = (ExpandableListView)findViewById(R.id.expandable_list_view);
initializeData();
listAdapter = new expandableListAdapter(this, listHeader, listHashMap);
listView.setAdapter(listAdapter);
// Pop-up menu
myDialog = new Dialog(this);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.back:
{
finish();
break;
}
case R.id.addCategory:
{
//View header = getLayoutInflater().inflate(R.layout.list_group, null);
//listView.addHeaderView(header);
/*
1) Create pop-up menu w/ EditText box
2) Type in header group to add
3) Click create button
4) Add new header to list
*/
try {
ShowPopup(item);
}
catch (Exception e)
{
Log.d(TAG, "Add pop-up: " + e.toString());
}
break;
}
Функция для создания всплывающего окна Строка, которую я пытаюсь исправить, это headerTitle
public void ShowPopup(MenuItem menuItem)
{
TextView textClose;
Button btnAddCategory;
myDialog.setContentView(R.layout.add_category_popup);
textClose = (TextView)myDialog.findViewById(R.id.textClose);
btnAddCategory = (Button)myDialog.findViewById(R.id.addCategory);
categoryTitle = (EditText)myDialog.findViewById(R.id.category_title);
headerTitle = categoryTitle.getText().toString(); // Header title to be used as hash key
Log.i(TAG, "ShowPopup: Assigned header title");
Log.i(TAG, "ShowPopup: " + headerTitle);
textClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myDialog.dismiss();
}
});
btnAddCategory.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(categoryTitle.getText().toString().isEmpty())
{
categoryTitle.setError("Field cannot be empty");
categoryTitle.requestFocus();
validTitle = false;
}
else
{
categoryTitle.setError(null);
validTitle = true;
}
if(validTitle) {
listHeader.add(headerTitle); // Add header title to list of headers
List<String> newHeader = new ArrayList<>(); // Create new expandable list w/ 0 items
listHashMap.put(listHeader.get(listHeader.size() - 1), newHeader);
myDialog.dismiss();
}
}
});
myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
myDialog.show();
}