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

问题描述 投票:0回答:1

我有一个包含三个选项卡(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;
}
}
android android-fragments
1个回答
0
投票

每当将新项目添加到列表时,都应使用adapter.notifyDataSetChanged()通知适配器。还可以考虑使用RecyclerView而不是ListView。与ListView相比,它具有更大的优势和改进。

© www.soinside.com 2019 - 2024. All rights reserved.