Android Listview替换第一项,而不是创建新项(从一个片段到另一个片段)

Android Listview替换第一项,而不是创建新项(从一个片段到另一个片段),android,android-fragments,Android,Android Fragments,我有一个报警应用程序,其中包含3个选项卡(3个片段),第一个是“编辑”,第二个是“报警”,显示所有报警的列表视图,最后一个选项卡是“添加报警”,我有时间选择器和按钮,我想当我选择一个时间并单击添加按钮时,将该值添加到选项卡“报警”,并将其添加到列表视图 但在我的代码中,它只生成一个条目,当我添加一个条目时,它会用新条目替换旧条目,所以它不会添加条目,只会更新 经过一天的搜索,我真的很累:( 谁能帮帮我吗。 这是我的全部代码 MainActivity.java public class MainA

我有一个报警应用程序,其中包含3个选项卡(3个片段),第一个是“编辑”,第二个是“报警”,显示所有报警的列表视图,最后一个选项卡是“添加报警”,我有时间选择器和按钮,我想当我选择一个时间并单击添加按钮时,将该值添加到选项卡“报警”,并将其添加到列表视图

但在我的代码中,它只生成一个条目,当我添加一个条目时,它会用新条目替换旧条目,所以它不会添加条目,只会更新

经过一天的搜索,我真的很累:(

谁能帮帮我吗。 这是我的全部代码

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);

}

}
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;
}
}
SectionsPagerAdapter.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);

}

}
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)

最后是Alarm.class(Fragment2)

公共类报警扩展片段{
公共ArrayList报警=新建ArrayList();
公共警报(){
//必需的空公共构造函数
}
列表视图列表;
按钮Goadalarm;
字符串格式=”;
字符串主语=”;
myAdapter适配器;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图v=充气机。充气(R.layout.fragment_报警,容器,错误);
list=v.findviewbyd(R.id.listview);
添加(新时间(“07:09”、“上午”、“星期三、星期一”、“回家时间”);
//此函数用于将新项从add.class添加到报警(列表视图)
adapter=newmyadapter(getContext(),R.layout.custom\u list\u报警,报警);
list.setAdapter(适配器);
返回v;
}
public void addNewAlarm(){
Bundle=getArguments();
字符串小时=bundle.getString(“小时”);
字符串格式=bundle.getString(“格式”);
字符串天数=bundle.getString(“天数”);
字符串标签=bundle.getString(“标签”);
添加(新时间(小时、格式、天数、标签));
}
}
列表视图适配器

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;
}
}
公共类myAdapter扩展了BaseAdapter{
私有上下文c;
fr片段;
私人住宅;
私有数组列表时间;
公共myAdapter(){
}
公共myAdapter(上下文c、int-res、数组列表时间)
{
这个.c=c;
this.res=res;
这个时间=时间;
}
公共无效添加警报(次)
{
this.time.add(次);
}
@凌驾
public int getCount(){
返回时间.size();
}
@凌驾
公共时间getItem(整数位置){
返回时间。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null)
{
v=从(c)开始的更平坦的充气(res,null,false);
}
TextView tv_name=v.findviewbyd(R.id.TextView);
TextView tv_name2=v.findViewById(R.id.textView2);
TextView tv_name3=v.findViewById(R.id.textView3);
TextView tv_name4=v.findviewbyd(R.id.textView4);
时间t=获取项目(位置);
tv_name.setText(t.getTime());
tv_name 3.setText(t.getDay());
tv_name 2.setText(t.getDays());
tv_name 4.setText(t.getSubject());
返回v;
}
}

< /代码> 当您将新项目添加到列表时,您应该通知<适配器> NoTIFYDATETEXTEDE()/代码>。还考虑使用<代码> CurryVIEW 而不是<代码> ListVIEW 。它具有更大的优点和改进,从<代码> ListVIEW < /C> >。谢谢,我在SQLite中保存了数据:现在更好了:D。