我有一个包含三个选项卡(3个片段)的警报应用程序,第一个是“ Edit”,第二个是“ Alarm”,显示所有警报的列表视图,最后一个选项卡是“ Add Alarm”时间选择器和按钮,我想在选择时间并单击“添加”按钮时,将该值添加到“警报”选项卡,并将其添加到列表视图。
但是在我的代码中,它仅生成一项,而当我添加一项时,它将旧项替换为新项,因此,它不会仅添加更新项。
经过一天的搜索,我真的很累:(
有人可以帮我吗?这是我的完整代码。
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
String getHourFromAddPage = intent.getStringExtra("HOURS_ADD_PAGE");
String getFormatFromAddPage = intent.getStringExtra("FORMAT_ADD_PAGE");
String getDaysFromAddPage = intent.getStringExtra("DAYS_ADD_PAGE");
String getLabelFromAddPage = intent.getStringExtra("LABEL_ADD_PAGE");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager() , getHourFromAddPage , getFormatFromAddPage , getDaysFromAddPage ,getLabelFromAddPage);
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(sectionsPagerAdapter);
viewPager.setCurrentItem(1);
TabLayout tabs = findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager);
}
}
SectionsPagerAdapter.java
public class SectionsPagerAdapter extends FragmentPagerAdapter {
@StringRes
private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2 , R.string.tab_text_3};
private final Context mContext;
private String time;
private String format;
private String days;
private String label;
public SectionsPagerAdapter(Context context, FragmentManager fm , String time ,String format , String days , String label ) {
super(fm);
mContext = context;
this.time = time;
this.format = format;
this.days = days;
this.label = label;
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
Fragment fragment = new Fragment();
switch (position)
{
case 0:
fragment = new Edit();
break;
case 1:
fragment = new Alarm();
Bundle bundle = new Bundle();
bundle.putString("HOUR", time);
bundle.putString("FORMAT", format);
bundle.putString("DAYS", days);
bundle.putString("LABEL", label);
fragment.setArguments(bundle);
break;
case 2:
fragment = new Add();
break;
}
return fragment;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mContext.getResources().getString(TAB_TITLES[position]);
}
@Override
public int getCount() {
// Show 2 total pages.
return 3;
}
}
这是Add.class(fragment1)
public class Add extends Fragment {
public Add() {
// Required empty public constructor
}
private TimePicker timePicker ;
private TextView tv ;
private Button add ;
private EditText label;
private String format = "";
public String subject = "";
static final String ADD_TIME_ALARM = "add_alarm";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_add, container, false);
tv = (TextView) v.findViewById(R.id.textView5);
timePicker = (TimePicker) v.findViewById(R.id.datePicker1);
label = (EditText) v.findViewById(R.id.subject) ;
add = (Button) v.findViewById(R.id.addAlarm);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addNewAlarm();
}
});
return v;
}
public void addNewAlarm()
{
subject = label.getText().toString();
int hour = timePicker.getHour();
//int minute = timePicker.getCurrentMinute();
if (hour == 0) {
hour += 12;
format = "AM";
} else if (hour == 12) {
format = "PM";
} else if (hour > 12) {
hour -= 12;
format = "PM";
} else {
format = "AM";
}
Intent intent = new Intent(getActivity().getBaseContext(), MainActivity.class);
intent.putExtra("HOURS_ADD_PAGE" , String.valueOf(hour));
intent.putExtra("FORMAT_ADD_PAGE" , format);
intent.putExtra("DAYS_ADD_PAGE" , "wed , mon");
intent.putExtra("LABEL_ADD_PAGE" , subject);
startActivity(intent);
}
}
最后在这里是Alarm.class(Fragment2)
public class Alarm extends Fragment {
public ArrayList<Times> Alarms = new ArrayList<>();
public Alarm() {
// Required empty public constructor
}
ListView list;
Button goAddAlarm ;
String format = "";
String subject = "";
myAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_alarm, container, false);
list = v.findViewById(R.id.listview);
Alarms.add(new Times( "07:09" , "AM" , "Wed , Mon" , "-Home Time"));
//This Func to add new item from Add.class to Alarm(List View)
adapter = new myAdapter(getContext(), R.layout.custom_list_alarm , Alarms);
list.setAdapter(adapter);
return v;
}
public void addNewAlarm(){
Bundle bundle = getArguments();
String hour = bundle.getString("HOUR");
String format = bundle.getString("FORMAT");
String days = bundle.getString("DAYS");
String label = bundle.getString("LABEL");
Alarms.add(new Times( hour , format , days , label));
}
}
列表视图适配器
public class myAdapter extends BaseAdapter {
private Context c;
Fragment fr ;
private int res ;
private ArrayList<Times> time;
public myAdapter() {
}
public myAdapter(Context c , int res , ArrayList<Times> time)
{
this.c = c;
this.res = res;
this.time = time;
}
public void addAlarm(Times times)
{
this.time.add(times);
}
@Override
public int getCount() {
return time.size();
}
@Override
public Times getItem(int position) {
return time.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if(v == null)
{
v = LayoutInflater.from(c).inflate(res , null , false);
}
TextView tv_name = v.findViewById(R.id.textView);
TextView tv_name2 = v.findViewById(R.id.textView2);
TextView tv_name3 = v.findViewById(R.id.textView3);
TextView tv_name4 = v.findViewById(R.id.textView4);
Times t = getItem(position);
tv_name.setText(t.getTime());
tv_name3.setText(t.getDay());
tv_name2.setText(t.getDays());
tv_name4.setText(t.getSubject());
return v;
}
}
每当将新项目添加到列表时,都应使用adapter.notifyDataSetChanged()
通知适配器。还可以考虑使用RecyclerView
而不是ListView
。与ListView
相比,它具有更大的优势和改进。