ListView不会显示所有项目

时间:2018-11-06 08:04:27

标签: java android listview

我的App快要完成了! 它工作正常,但是其中有一个小错误。

我的应用程序是一个“便笺”应用程序,其中包含一些预制的便笺,这些便笺是该应用程序的首次打开。 因此,我会在第一次启动时保存此笔记,并在每次再次启动该应用程序时获取它们。 不幸的是,我有66个预制注释,它们都被保存了,但是在ListView中只有45个左右。.

我认为这与语法无关,因为该应用程序运行正常,除了丢失了21个预制音符

这是我的MainActivity代码:

@Override
protected void onCreate(Bundle savedInstanceState) {

    SharedPreferences preferences = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    boolean useDarkTheme = preferences.getBoolean(PREF_DARK_THEME, false);
    SharedPreferences prefers = getApplicationContext().getSharedPreferences("prefs_daten", MODE_PRIVATE);
    if (useDarkTheme) {
        setTheme(R.style.AppTheme_dark);
    }

    super.onCreate(savedInstanceState);
    if (VERBOSE) Log.v(TAG, "+ ON CREATE +");
    setContentView(layout.activity_hauptmenu);

    mListNotes = findViewById(id.listview);

    itemTitel = new ArrayList<>();
    itemTitel.addAll(Arrays.asList(string.Titel1, string.Titel2, string.Titel3, ...
            string.Titel66));
    itemStory = new ArrayList<>();
    itemStory.addAll(Arrays.asList(string.Blackstory1, ...));
    itemLosung = new ArrayList<>();
    itemLosung.addAll(Arrays.asList(string.Losung1, ..));
}

private void StandardBS() {
    if (Listensize==0){
        anzahl_BS=66;
        int a;
        for(a=0; a<anzahl_BS; a++){

            try{
                tempTitel = getResources().getString(itemTitel.get(a));
                tempStory = getResources().getString(itemStory.get(a));
                tempLosung = getResources().getString(itemLosung.get(a));
                Blackstory blackstory = new Blackstory(System.currentTimeMillis(), tempTitel, tempStory, tempLosung);
                Log.w("Blackstory", ""+tempTitel);
                Utilities.saveBlackstory(this, blackstory);
                    //Toast.makeText(this, "Blackstory wurde gespeichert!", Toast.LENGTH_SHORT).show();
                }
            catch (NullPointerException e){
                //Toast.makeText(this, "Standard wurde falsch ausgeführt", Toast.LENGTH_SHORT).show();
            }

        }
        Log.w("Anzahl", ""+a);
    }

@Override
protected void onResume() {
    super.onResume();
        try{
            mListNotes.setAdapter(null);
        }
        catch (NullPointerException e){
            Toast.makeText(this, "not null", Toast.LENGTH_SHORT).show();
        }
        final ArrayList<Blackstory> blackstories = Utilities.getAllSavedBlackstory(getApplicationContext());
        Listensize=blackstories.size();
        anzahl_BS=Listensize;
        if(blackstories != null && blackstories.size() > 0) { //check if we have any notes!
            na = new BlackstoryAdapter(this, layout.item_layout1, blackstories);
            try{
                mListNotes.setAdapter(na);
            }
            catch (NullPointerException e){
                Toast.makeText(this, "Irgendwas ist falsch2", Toast.LENGTH_SHORT).show();
            }

        //set click listener for items in the list, by clicking each item the note should be loaded into NoteActivity
            try{
                mListNotes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //run the NoteActivity in view/edit mode
                        fileName = ((Blackstory) mListNotes.getItemAtPosition(position)).getDateTime()
                                + Utilities.FILE_EXTENSION;
                        Intent viewBlackstoryIntent = new Intent(getApplicationContext(), number1.class);
                        viewBlackstoryIntent.putExtra(Utilities.EXTRAS_NOTE_FILENAME, fileName);
                        startActivity(viewBlackstoryIntent);
                    }
                });

                mListNotes.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

                    @Override
                    public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                            //ask user if he really wants to delete the note!
                            Dialog_delete(position, id);
                            return true;
            }});}

            catch (NullPointerException e){
                Toast.makeText(this, "Irgendwas ist falsch3", Toast.LENGTH_SHORT).show();
            }}
         else { //remind user that we have no notes!
            Toast.makeText(getApplicationContext(), "you have no saved notes!\ncreate some new notes :)"
                    , Toast.LENGTH_SHORT).show();
        }

    firstOpen=false;
}

我的实用程序(用于保存和加载注释):

public class Utilities {

public static final String FILE_EXTENSION = ".bin";
public static final String EXTRAS_NOTE_FILENAME = "EXTRAS_NOTE_FILENAME";

public static boolean saveBlackstory(Context context, Blackstory blackstory){
    String fileName = String.valueOf(blackstory.getDateTime()) + FILE_EXTENSION;

    FileOutputStream fos;
    ObjectOutputStream oos;

    try{
        fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
        oos = new ObjectOutputStream(fos);
        oos.writeObject(blackstory);
        oos.close();
    }
    catch (IOException e) {
        e.printStackTrace();
        Log.w("Failed","");
        return false;
    }
    return true;
}
public static ArrayList<Blackstory> getAllSavedBlackstory(Context context) {
    ArrayList<Blackstory> blackstories = new ArrayList<>();

    File filesDir = context.getFilesDir();
    ArrayList<String> blackstoryFiles = new ArrayList<>();
    int size = blackstoryFiles.size();
    //add .bin files to the noteFiles list
    for(String file : filesDir.list()) {

        if(file.endsWith(FILE_EXTENSION)) {
            blackstoryFiles.add(file);
            Log.w("Included", ""+file);
        }
    }
    //read objects and add to list of notes
    FileInputStream fis;
    ObjectInputStream ois;

    for (int i = 0; i < blackstoryFiles.size(); i++) {
        try{
            fis = context.openFileInput(blackstoryFiles.get(i));
            ois = new ObjectInputStream(fis);

            blackstories.add((Blackstory)ois.readObject());
            fis.close();
            ois.close();

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
    return blackstories;
}
public static Blackstory getBlackstoryByFileName(Context context, String fileName) {

    File file = new File(context.getFilesDir(), fileName);
    if(file.exists() && !file.isDirectory()) { //check if file actually exist

        Log.v("UTILITIES", "File exist = " + fileName);

        FileInputStream fis;
        ObjectInputStream ois;

        try { //load the file
            fis = context.openFileInput(fileName);
            ois = new ObjectInputStream(fis);
            Blackstory note = (Blackstory) ois.readObject();
            fis.close();
            ois.close();

            return note;

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    } else {
        return null;
    }
}

public static boolean deleteFile(Context context, String fileName) {
    File dirFiles = context.getFilesDir();
    File file = new File(dirFiles, fileName);

    if(file.exists() && !file.isDirectory()) {
        return file.delete();
    }
    return false;
}

我的适配器:

public class BlackstoryAdapter extends ArrayAdapter<Blackstory> {

public static final int WRAP_CONTENT_LENGTH = 50;

public BlackstoryAdapter(Context context, int resource, List<Blackstory> blackstories) {
    super(context, resource, blackstories);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {
        convertView = LayoutInflater.from(getContext())
                .inflate(R.layout.item_layout1, null);
    }

    Blackstory blackstory = getItem(position);

    if(blackstory != null) {
        TextView title = convertView.findViewById(R.id.single_titel);

        title.setText(blackstory.getTitel());

    }

    return convertView;
}

我的Blackstory.java:

public class Blackstory implements Serializable {
private String mTitel;
private String mStory;
private String mLosung;
private long mDateTime;

public Blackstory(long dateInMills, String titel, String story, String losung) {
    mDateTime = dateInMills;
    mTitel = titel;
    mStory = story;
    mLosung = losung;
}

public void setDateTime(long dateTime) {
    mDateTime = dateTime;
}

public long getDateTime() {
    return mDateTime;
}

public String getDateTimeFormatted(Context context) {
    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"
            , context.getResources().getConfiguration().locale);
    formatter.setTimeZone(TimeZone.getDefault());
    return formatter.format(new Date(mDateTime));
}

public String getTitel() {
    return mTitel;
}

public void setTitel(String titel) {
    mTitel = titel;
}

public String getStory() {
    return mStory;
}

public void setStory(String story) {
    mStory = story;
}

public String getLosung() {
    return mLosung;
}

public void setLosung(String losung) {
    mLosung = losung;
}

}

1 个答案:

答案 0 :(得分:1)

不需要AguThadeus指出的getCount()方法。数组数据将传递给超类,以便处理视图数。