簡體   English   中英

在Android上將數據從ListView寫入文本文件

[英]Writing data from a ListView to a Text File on Android

我是Java和Android的新手,正在嘗試弄清楚如何編寫ListView並從保存它的位置加載ListView。

我有ListView,並且ListView上的每個項目都有一個字符串和布爾值,如果該項目的復選框處於選中狀態或未選中狀態,它就會發生變化。 我有一個可以將項目添加到ListView的有效方法,現在正在嘗試弄清楚如何將ListView寫入文本文件。

通過單擊菜單項,我得到了一些用於保存ListView的代碼,當我在OnCreate中重新運行程序時,我試圖將其加載,但是沒有任何加載。 我不確定它的寫入或加載不起作用還是兩者都不起作用。

這是我制作的與ListView一起使用的類。

Item.java

public class Item {
String name;
boolean isChecked = false;

public Item(String name) {this.name = name;}

public Item(String name, boolean checked){
    this.name = name;
    this.isChecked = checked;

}
@Override
public String toString(){
    return name;
}
}

這是我的MainActivity.java,其中包括我的saveList()和readFile()

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getName();
ArrayList<Item> items = new ArrayList<>();
private ListView lv;
private static final String sFile = "Saved.txt";
protected ListView getListView() {
    if (lv == null) {
        lv = (ListView) findViewById(android.R.id.list);
    }
    return lv;
}

protected void setListAdapter(ListAdapter adapter) {
    getListView().setAdapter(adapter);
}

protected ListAdapter getListAdapter() {
    ListAdapter adapter = getListView().getAdapter();
    if (adapter instanceof HeaderViewListAdapter) {
        return ((HeaderViewListAdapter) adapter).getWrappedAdapter();
    } else {
        return adapter;
    }

}

private void deleteList()
{
    if (!items.isEmpty())
    {
        items.clear();
    }
    lv.invalidateViews();
}

private void deleteCheckedItems()
{
    SparseBooleanArray checked = lv.getCheckedItemPositions();
   for(int i = 0; i < lv.getCount(); i++)
    {
        if (checked.get(i)==true)
        {
            items.remove(i);
        }
        lv.invalidateViews();
    }

    lv.clearChoices();

}

private void saveList(ArrayList<Item> itemlist) {
    try {
        OutputStreamWriter out = new OutputStreamWriter(openFileOutput(sFile, 0));
        int iCnt = 0;
        String allstring = "";
        for (Item s : items)
        {
            if (s.isChecked)
            {
                iCnt++;
                if (iCnt < items.size()) {
                    String thisstring;
                    thisstring = s.name + "\r\n";
                    out.write(thisstring);
                    allstring += thisstring;
                } else {
                    String thisstring;
                    thisstring = s.name;
                    out.write(thisstring);
                    allstring += thisstring;
                }
            }

        }
        out.close();
        //Toast.makeText(activity, allstring + " Written", duration).show();
    }
    catch (java.io.FileNotFoundException e)
    {

    }
    catch (Exception ex)
    {
      //  Toast.makeText(activity, "Write Exception : " + ex.getMessage(), duration).show();
    }

}

public String readFile(ArrayList<Item> itemsList)
{
    String sRet = "Nothing";

    try
    {
        InputStream is = openFileInput(sFile);
        if (is != null)
        {
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String sLine;
            StringBuffer sb = new StringBuffer();

            while ((sLine = br.readLine()) != null)
                sb.append(sLine + "\r\n");

            is.close();
            sRet = sb.toString();
           // Toast.makeText(Toast.LENGTH_LONG).show();
        }
    }

    catch (java.io.FileNotFoundException e)
    {

    }

    catch (Exception ex)
    {
     //   Toast.makeText(activi"Read Exception" + ex.getMessage(), Toast.LENGTH_LONG).show();
    }

    return sRet;
}


private void addItemDialog()
{

    LayoutInflater inflater = LayoutInflater.from(this);
    final View addView = inflater.inflate(R.layout.add, null);

    new AlertDialog.Builder(this)
            .setTitle("Add Item")
            .setView(addView)
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    EditText txtAdd = (EditText) addView.findViewById(R.id.etInput);
                    String sItem = (txtAdd).getText().toString();
                    items.add(new Item(sItem));
                    for (int i = 0; i < items.size(); i++)
                    {
                        lv.setItemChecked(i, items.get(i).isChecked);
                    }

                }

            })
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                        }
                    }).show();
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    setListAdapter(new ArrayAdapter<Item>(this, android.R.layout.simple_list_item_multiple_choice, items));

    lv = this.getListView();
    for (int i = 0; i < items.size(); i++)
    {
        lv.setItemChecked(i, items.get(i).isChecked);
    }
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    readFile(items);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {


    switch(item.getItemId()){
        case R.id.add_item:
            addItemDialog();
            return true;
        case R.id.clear_all:
            deleteList();
            return true;
        case R.id.clear_checked:
            deleteCheckedItems();
            return true;
        case R.id.write:
            saveList(items);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }


}
}

在聲明之后將oncreate方法放在上面,這意味着在此行之后

     private static final String sFile = "Saved.txt";
      @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        .......
        .......
        //your code
        }

    //other method

閱讀Android活動生命周期,以更好地了解

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM