情境
來寫一個簡單的記事本
可以新增刪除以及編輯
在看這篇文章之前,你可能需要了解一下以下的內容
如何使用ListView
如何使用Menu
如何使用AlertDialog
如何動態增減自訂ListView
這樣可能會比較容易理解本篇文章
完整程式碼
在一開始我們會先把完整程式碼呈現出來
只需要開啟新專案以後
複製貼上到相對應的位置就可以看到執行結果
MainActivty.java部分
public class MainActivity extends AppCompatActivity {
private EditText inputText;
private ListView listInput;
private ArrayAdapter<String> adapter;
private ArrayList<String> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputText = (EditText)findViewById(R.id.inputText);
listInput = (ListView)findViewById(R.id.listInputText);
items = new ArrayList<>();
adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,items);
listInput.setAdapter(adapter);
listInput.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id) {
final int pos = position;
new AlertDialog.Builder(MainActivity.this)
.setTitle("刪除列")
.setMessage("你確定要刪除?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
items.remove(pos);
listInput.setAdapter(adapter);
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, "新增");
menu.add(Menu.NONE, Menu.FIRST + 1, Menu.NONE, "離開程式");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Menu.FIRST:
if(!inputText.getText().toString().equals("")){
items.add(inputText.getText().toString());
listInput.setAdapter(adapter);
inputText.setText("");
}
break;
case Menu.FIRST + 1:
new AlertDialog.Builder(MainActivity.this)
.setTitle("離開此程式")
.setMessage("你確定要離開?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
break;
}
return super.onOptionsItemSelected(item);
}
}
activity_main.xml部分
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:hint="請輸入文字..."
android:layout_alignParentLeft="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/inputText"
android:singleLine="true" />
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listInputText" />
</LinearLayout>
程式碼說明
首先我們定義EditText以及ListView
當我們在EditText裡面輸入文字,
接著按下Menu選擇新增, 就會把文字加入ListView。
首先定一個xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:hint="請輸入文字..."
android:layout_alignParentLeft="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/inputText"
android:singleLine="true" />
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listInputText" />
</LinearLayout>
EditText裡面有一個屬性值singleLine設為true,
是防止使用者按下enter則EditText就會跳到下一行。
然後在onCreate裡面初始化每一個元件
private EditText inputText;
private ListView listInput;
private ArrayAdapter<String> adapter;
private ArrayList<String> items;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inputText = (EditText)findViewById(R.id.inputText);
listInput = (ListView)findViewById(R.id.listInputText);
items = new ArrayList<String>();
adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,items);
listInput.setAdapter(adapter); }
其中ArrayList主要是因為想要動態新增ListView的item,
因此我們不用Array。
接著我們把Menu事件加入,
當按下menu的時候, 會跳出新增跟離開程式的選項。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, "新增");
menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "離開程式");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case Menu.FIRST:
if(!inputText.getText().toString().equals("")){
items.add(inputText.getText().toString());
listInput.setAdapter(adapter);
inputText.setText("");
}
break;
case Menu.FIRST + 1:
new AlertDialog.Builder(MainActivity.this)
.setTitle("離開此程式")
.setMessage("你確定要離開?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
break;
}
return super.onOptionsItemSelected(item);
}
第一個選項是本支程式最重要的部份,
當新增一個item的時候, 如何讓ListView能夠即時更新,
最主要的是將adapter重新載入。
第二個選項跳出一個AlertDialog再跟使用者確定一次是否真的要離開程式。
那如果想要刪除某一個item怎麼辦, 所以我們再加上一個事件,
當使用者長按著某一個item時,我們就跳出AlertDialog,
詢問是否要刪除這個item。
listInput.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View view, int position, long id) {
final int pos = position;
new AlertDialog.Builder(ListViewDBDemoActivity.this)
.setTitle("刪除列")
.setMessage("你確定要刪除?")
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
items.remove(pos);
listInput.setAdapter(adapter);
}
})
.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
return false;
}
});
這樣一來就完成一個簡單版的記事本了