在Activity A中,我有一个listView和一个用于意图活动B的操作栏图标。如果按下listView,它会将所有值从A发送到B并显示在editText上。
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {
Expenses o = (Expenses) obj.getItem(position);
String day = o.getDate(); // 4 Dec 2016
String[] split = day.split("\\s+");
String date= split[1]; // 4
Intent intent = new Intent(QuickExpenses.this,AddExpenses.class);
intent.putExtra("date",date);
intent.putExtra("month", month); // Dec 2016
startActivity(intent);
}
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_task:
Intent intent = new Intent(QuickExpenses.this, AddExpenses.class);
intent.putExtra("month", month); // Dec 2016
startActivityForResult(intent, PROJECT_REQUEST_CODE);
return true;
}
}
活动B
活动B有一个editText。当按下editText时,它会弹出datePickerDialog,供用户选择日期。
EditText date;
String month;
date = (EditText) findViewById(R.id.date);
month = getIntent().getStringExtra("month");
if(getIntent().getExtras()!=null) { //if has value pass from A (listView pressed)
String mDay = getIntent().getExtras().getString("date");
date.setText(mDay + "" + month);
}
因此,如果按下列表视图,它将在EditText
日期显示2016年12月5日。但问题是,当我单击活动A中的图标时,它会显示null Dec 2016
。我想使用editText
和date.setText("")
来清除date.getText().clear();
,但它仍显示null Dec 2016
。
如果图标活动A已按下但未按下,我希望日期
editText
不显示null Dec 2016
。
答案 0 :(得分:4)
你的代码的问题在于你在两种情况下的传递意图,所以这就是它进入这个区块的原因
if(getIntent().getExtras()!=null) { //if has value pass from A (listView pressed)
String mDay = getIntent().getExtras().getString("date");
date.setText(mDay + "" + month);
}
所以只需使用以下代码更改您的if条件
if(getIntent().getExtras().getString("date")!=null) { //if has value pass from A (listView pressed)
String mDay = getIntent().getExtras().getString("date");
date.setText(mDay + "" + month);
}
else {
date.setText("");
}
希望这会有所帮助
答案 1 :(得分:2)
检查以下代码:
if(getIntent().getExtras()!=null) { //if has value pass from A (listView pressed)
String mDay = getIntent().getStringExtra("date");
if(!TextUtils.isEmpty(mDay) && !TextUtils.isEmpty(month)){
date.setText(mDay + "" + month);
}
}
答案 2 :(得分:1)
点击活动A删除intent.putExtra(&#34;月&#34;,月);点击图标点击,然后在活动B中尝试下面的代码
date = (EditText) findViewById(R.id.date);
month = getIntent().getStringExtra("month");
mDay = getIntent().getStringExtra("date");
if(getIntent().getExtras()=null) { //if has value pass from A (listView pressed)
date.setText("");
}
试试这个
答案 3 :(得分:0)
试试以下代码段!
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add_task:
Intent intent = new Intent(QuickExpenses.this, AddExpenses.class);
intent.putExtra("date", ""); // Dec 2016
intent.putExtra("month", month); // Dec 2016
startActivityForResult(intent, PROJECT_REQUEST_CODE);
return true;
}
}
希望这对你有帮助!
答案 4 :(得分:0)
根据您的准则, 当您点击操作栏中的图标时,使用意图发送某个值(可变月份,即可能持有2016年12月的值)
除去
intent.putExtra("month", month); // Dec 2016
来自onOptionsItemSelected
答案 5 :(得分:0)
您必须从列表视图或图标中检查意图。从您的代码可以检查mDay是否为空。如果mDay为空,则按下表单图标。
public void displayPopupWindow() {
View layout = getLayoutInflater().inflate(R.layout.popup,null);
final PopupWindow popup = new PopupWindow(this);
popup.setContentView(layout);
popup.setOutsideTouchable(true);
popup.setFocusable(true);
popup.setWidth(400);
popup.setHeight(580);
popup.showAtLocation(layout, Gravity.CENTER, 0, 0);
popup.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Button button = (Button) layout.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View layout) {
popup.dismiss();
}
});
}