gpt4 book ai didi

java - 如何将微调器值传递或获取到 android 中的字符串?

转载 作者:行者123 更新时间:2023-12-04 14:05:58 24 4
gpt4 key购买 nike

我正在尝试将值从 spinner.setOnItemSelectedListener 传递到包含日期字符串的字符串。我有两个微调器月和年,这里我只显示月微调器,因为如果我得到月微调器的解决方案,那么年也是一样的。


month_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if (parent.getId() == R.id.month_spinner){
seltmont = parent.getSelectedItem().toString();

Toast.makeText(MainActivity.this, "Selected Month: " + seltmont, Toast.LENGTH_SHORT).show();
textviewMonth.setText(seltmont);
setMonthView();
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

我试过像这样访问微调器值:- String month = month_spinner.getSelectedItem().toString();

并尝试将微调器 onItemSelectListener 值传递给 combinedString 字符串变量,如下所示:-


combinedString = "01/" + month + "/" + year ;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMMM/yyyy");
selectdate = LocalDate.parse(combinedString, formatter);

我在微调器中已经预选的组合字符串中获得了默认值,但是当用户尝试更改微调器中显示的默认值时,它不会更改该值。它在 combinedString 中给出空值。谁能帮我如何将值从onItemSelectListener传递给combinedString

是因为方法的范围('{}')还是因为私有(private)或公共(public)变量声明。

请帮忙。

顺便说一下,整个代码都是用 JAVA 编写的。这是完整的代码:-



public class MainActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener {

TextView monthYearText, textviewMonth,textviewYear,textviewYearnMonth;
RecyclerView calendarReyclerView;
LocalDate selectdate;

private Spinner month_spinner,spinYear;
String [] months;

String combinedString;
String selectedMonth;

String seltmont;
String selctYear;


@SuppressLint("SetTextI18n")
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textviewMonth = findViewById(R.id.textviewMonth);
textviewYear = findViewById(R.id.textviewYear);

//for testing
textviewYearnMonth = findViewById(R.id.textviewYearnMonth);

month_spinner = findViewById(R.id.month_spinner);
spinYear = findViewById(R.id.yearspin);


populateSpinnerMonth();
populateSpinnerYear();



initWidget();
selectdate = LocalDate.now();
setMonthView();


//---- on click listener ---//

month_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if (parent.getId() == R.id.month_spinner){
seltmont = parent.getSelectedItem().toString();

Toast.makeText(MainActivity.this, "Selected Month: " + seltmont, Toast.LENGTH_SHORT).show();
textviewMonth.setText(seltmont);
setMonthView();
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

spinYear.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if (parent.getId() == R.id.yearspin){
selctYear = parent.getSelectedItem().toString();
Toast.makeText(MainActivity.this, "Selected Year" + selctYear, Toast.LENGTH_SHORT).show();
textviewYear.setText(selctYear);
setMonthView();
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});


// ---- on click listener ---//


String month = month_spinner.getSelectedItem().toString();
String year= spinYear.getSelectedItem().toString();



// String month = textviewMonth.getText().toString();
//String year = textviewYear.getText().toString();


//combinedString = "16/09/2019";
combinedString = "01/" + month + "/" + year ;

// combinedString = "01/" + mon + "/" + year ;


DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMMM/yyyy");
selectdate = LocalDate.parse(combinedString, formatter);

/* //not working
String mon = textviewMonth.getText().toString();
Log.d("month","code is going here");
textviewYearnMonth.setText(mon);
Log.d("month","code cross the textviewYearnMonth"); */
// textviewYearnMonth.setText(seltmont);


}



private void populateSpinnerYear() {

ArrayList<String> years = new ArrayList<String>();
int thisYear = Calendar.getInstance().get(Calendar.YEAR);

for (int i = 1950; i <= thisYear; i++){
years.add(Integer.toString(i));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,years);
spinYear.setAdapter(adapter);

}

private void populateSpinnerMonth() {

months = new DateFormatSymbols().getMonths();
ArrayAdapter<String> monthAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,months);
monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
month_spinner.setAdapter(monthAdapter);


}


@RequiresApi(api = Build.VERSION_CODES.O)
private void setMonthView() {


monthYearText.setText(monthYearFromDate(selectdate));
ArrayList<String> daysInMonth = daysInMonthArray(selectdate);

CalendarAdapter calendarAdapter = new CalendarAdapter(daysInMonth, this);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(),7); //for calendar columns
calendarReyclerView.setLayoutManager(layoutManager);
calendarReyclerView.setAdapter(calendarAdapter);

}

@RequiresApi(api = Build.VERSION_CODES.O)
private ArrayList<String> daysInMonthArray(LocalDate date) {

ArrayList<String> daysInMonthArray = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);

int daysInMonth = yearMonth.lengthOfMonth();

LocalDate firstOfMonth = selectdate.withDayOfMonth(1);
int dayOfWeek = firstOfMonth.getDayOfWeek().getValue();

for(int i = 1; i <= 42; i++)
{
if(i <= dayOfWeek || i > daysInMonth + dayOfWeek)
{
daysInMonthArray.add("");
}
else
{
daysInMonthArray.add(String.valueOf(i - dayOfWeek));
}
}
return daysInMonthArray;

}

@RequiresApi(api = Build.VERSION_CODES.O)
private String monthYearFromDate(LocalDate date){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}

private void initWidget() {

calendarReyclerView = findViewById(R.id.calendarRecyclerView);
monthYearText = findViewById(R.id.monthYearTV);

}

@RequiresApi(api = Build.VERSION_CODES.O)
public void previousMonthAction(View view) {



selectdate = selectdate.minusMonths(1);
setMonthView();

}

@RequiresApi(api = Build.VERSION_CODES.O)
public void nextMonthAction(View view) {

selectdate = selectdate.plusMonths(1);
setMonthView();

}

@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onItemClick(int position, String dayText) {

if(!dayText.equals(""))
{
String message = "Selected Date " + dayText + " " + monthYearFromDate(selectdate);
Toast.makeText(this, message, Toast.LENGTH_LONG).show();



}

}


我附上了输出的两张图片:

首次启动的初始阶段->图 1

Initial Stage at first launch

在我更改微调器值后 ->Image 2

After I changed the spinners value

最佳答案

声明 selectdate 为静态 public static LocalDate selectdate;

创建一个名为getSelectDate 的方法并调用它来获取更改的值,例如在 onCreate 内部,在 month_spinner< 的 onItemSelected 内部spinYear

 private void getSelectDate() {
//added
String month = month_spinner.getSelectedItem().toString();
String year = spinYear.getSelectedItem().toString();


//String month = textviewMonth.getText().toString();
//String year = textviewYear.getText().toString();


//combinedString = "16/09/2019";
combinedString = "01/" + month + "/" + year;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMMM/yyyy");
selectdate = LocalDate.parse(combinedString, formatter);
//
}

这也将解决您的按钮问题。一切都很好 。 setMonthView 回滚到您的旧代码。这是你的类(class)-

    public class MainActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener {

TextView monthYearText, textviewMonth, textviewYear, textviewYearnMonth;
RecyclerView calendarReyclerView;
public static LocalDate selectdate;

private Spinner month_spinner, spinYear;
String[] months;

String combinedString;
String selectedMonth;

String seltmont;
String selctYear;


@SuppressLint("SetTextI18n")
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

textviewMonth = findViewById(R.id.textviewMonth);
textviewYear = findViewById(R.id.textviewYear);

//for testing
textviewYearnMonth = findViewById(R.id.textviewYearnMonth);

month_spinner = findViewById(R.id.month_spinner);
spinYear = findViewById(R.id.yearspin);


populateSpinnerMonth();
populateSpinnerYear();


initWidget();
// selectdate = LocalDate.now();
getSelectDate();
setMonthView();


//---- on click listener ---//

month_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if (parent.getId() == R.id.month_spinner) {
seltmont = parent.getSelectedItem().toString();

Toast.makeText(MainActivity.this, "Selected Month: " + seltmont, Toast.LENGTH_SHORT).show();
textviewMonth.setText(seltmont);
//added
getSelectDate();
updateView();
setMonthView();


}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

spinYear.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if (parent.getId() == R.id.yearspin) {
selctYear = parent.getSelectedItem().toString();
Toast.makeText(MainActivity.this, "Selected Year" + selctYear, Toast.LENGTH_SHORT).show();
textviewYear.setText(selctYear);
getSelectDate();
updateView();
setMonthView();
}

}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});


// ---- on click listener ---//

}

@RequiresApi(api = Build.VERSION_CODES.O)
private void getSelectDate() {
//added
String month = month_spinner.getSelectedItem().toString();
String year = spinYear.getSelectedItem().toString();


//String month = textviewMonth.getText().toString();
//String year = textviewYear.getText().toString();


//combinedString = "16/09/2019";
combinedString = "01/" + month + "/" + year;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MMMM/yyyy");
selectdate = LocalDate.parse(combinedString, formatter);
//
}

//added
private void updateView() {

// combinedString = "01/" + mon + "/" + year ;

//not working
String mon = textviewMonth.getText().toString();
// Log.d("month","code is going here");
// textviewYearnMonth.setText(mon);
// Log.d("month","code cross the textviewYearnMonth");
textviewYearnMonth.setText(mon);
}


private void populateSpinnerYear() {

ArrayList<String> years = new ArrayList<String>();
int thisYear = Calendar.getInstance().get(Calendar.YEAR);

for (int i = 1950; i <= thisYear; i++) {
years.add(Integer.toString(i));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, years);
spinYear.setAdapter(adapter);

}

private void populateSpinnerMonth() {

months = new DateFormatSymbols().getMonths();
ArrayAdapter<String> monthAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, months);
monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
month_spinner.setAdapter(monthAdapter);


}


@RequiresApi(api = Build.VERSION_CODES.O)
private void setMonthView() {
monthYearText.setText(monthYearFromDate(selectdate));
ArrayList<String> daysInMonth = daysInMonthArray(selectdate);
CalendarAdapter calendarAdapter = new CalendarAdapter(daysInMonth, this);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7); //for calendar columns
calendarReyclerView.setLayoutManager(layoutManager);
calendarReyclerView.setAdapter(calendarAdapter);

}

@RequiresApi(api = Build.VERSION_CODES.O)
private ArrayList<String> daysInMonthArray(LocalDate date) {

ArrayList<String> daysInMonthArray = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);

int daysInMonth = yearMonth.lengthOfMonth();

LocalDate firstOfMonth = selectdate.withDayOfMonth(1);
int dayOfWeek = firstOfMonth.getDayOfWeek().getValue();

for (int i = 1; i <= 42; i++) {
if (i <= dayOfWeek || i > daysInMonth + dayOfWeek) {
daysInMonthArray.add("");
} else {
daysInMonthArray.add(String.valueOf(i - dayOfWeek));
}
}
return daysInMonthArray;

}

@RequiresApi(api = Build.VERSION_CODES.O)
private String monthYearFromDate(LocalDate date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM yyyy");
return date.format(formatter);
}

private void initWidget() {

calendarReyclerView = findViewById(R.id.calendarRecyclerView);
monthYearText = findViewById(R.id.monthYearTV);

}

@RequiresApi(api = Build.VERSION_CODES.O)
public void previousMonthAction(View view) {


selectdate = selectdate.minusMonths(1);
setMonthView();

}

@RequiresApi(api = Build.VERSION_CODES.O)
public void nextMonthAction(View view) {

selectdate = selectdate.plusMonths(1);
setMonthView();

}

@RequiresApi(api = Build.VERSION_CODES.O)
public void onItemClick(int position, String dayText) {

if (!dayText.equals("")) {
String message = "Selected Date " + dayText + " " + monthYearFromDate(selectdate);
Toast.makeText(this, message, Toast.LENGTH_LONG).show();


}

}
}

要获取 "dd/MM/yyyy" 这种格式,请使用 DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ENGLISH).format(selectdate); ,无需其他更改。

测试-

@RequiresApi(api = Build.VERSION_CODES.O)
private void updateView() {

// combinedString = "01/" + mon + "/" + year ;

//not working
String mon = textviewMonth.getText().toString();
// Log.d("month","code is going here");
// textviewYearnMonth.setText(mon);
// Log.d("month","code cross the textviewYearnMonth");
textviewYearnMonth.setText(DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ENGLISH).format(selectdate));
}



关于java - 如何将微调器值传递或获取到 android 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68502185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com