הנה עוד דוגמא עם ListView. מאפייני הדוגמא:
- שימוש ב-Activity ולא ב-ListActivity. היות שכך, ה-onListItemClick לא נתמך. במקומו נשתמש ב-onItemClick.
- הוספת ומחיקת פריטים מה-ListView באופן אינטראקטיבי ע"י click. שימוש ב- onListItemClick להוספת פריט וב-onItemLongClick למחיקה.
בפוסט זה לא ארבה בהסברים. ראה הסבר מפורט על ListView ב-פוסט קודם.
תחילה אציג את המסכים:
המסך הראשי:
מלבד רכיבי הטקסט שעל המסך, המרכיבים החשובים הם ה-EditText וה-List.
- נגיעה על פריט ב-ListView תוסיף לפניו פריט נוסף. הטקסט שלו יהיה: הטקסט שבו נגענו מחובר לטקסט שהוקלד ל-EditText. בשורה השניה ניתן לראות טקסט שהוכנס.
- נגיעה ארוכה על הפריט תמחוק אותו.
מסך העזרה:
והנה הקוד: קובץ ה-Layout ואחריו ה-Java.
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id = "@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<EditText
android:id = "@+id/editText"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:paddingTop = "10sp"
android:paddingBottom = "10sp"
/>
<LinearLayout
android:id = "@+id/linearLayout2"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id = "@+id/linearLayout1"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<EditText
android:id = "@+id/editText"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:paddingTop = "10sp"
android:paddingBottom = "10sp"
/>
<LinearLayout
android:id = "@+id/linearLayout2"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
ה-Layout כולל שני LinaerLayout האחד עם id = linearLayout1 השני עם id = linearLayout. בתוך ה-java יולבשו עליהם TextViews ע"י addView.
והנה ה-Java:
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class ArrayListInteractive extends Activity implements OnItemClickListener, AdapterView.OnItemLongClickListener
{
private ListView listView;
private List<String> arrayList;
TextView textv;
EditText editView;
ArrayAdapter<String> adaptr;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editView = (EditText) findViewById(R.id.editText);
listView = (ListView) findViewById(R.id.listView);
arrayList = new ArrayList<String>();
arrayList.add("Sunday");
arrayList.add("Monday");
arrayList.add("Tuesday");
arrayList.add("Wednesday");
arrayList.add("Thursday");
adaptr = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, arrayList);
listView.setAdapter(adaptr);
listView.setOnItemClickListener(this);
listView.setOnItemLongClickListener(this);
TextView textview = new TextView(this);
textview.setTextSize(18);
textview.setText("Press Menu Button for Help\n");
TextView textview1 = new TextView(this);
textview1.setText("Insert Text for New Item:");
LinearLayout ll1 = (LinearLayout)findViewById(R.id.linearLayout1);
LinearLayout ll2 = (LinearLayout)findViewById(R.id.linearLayout2);
ll2.addView(textview);
ll1.addView(textview1);
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Object object = adapterView.getItemAtPosition(position);
String oldText = object.toString();
String newText = editView.getText().toString();
arrayList.add(newText);
StringBuilder sb = new StringBuilder();
String appendText = sb.append(oldText).append(" ").append(newText).toString();
adaptr.insert(appendText, (int)id);
adaptr.notifyDataSetChanged();
}
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) {
arrayList.remove((int)id);
adaptr.notifyDataSetChanged();
return(true);
}
static final int help = Menu.FIRST;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, help, Menu.NONE, "Help");
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case help:
showDialog(0);
return(true);
}
return(false);
}
@Override
protected Dialog onCreateDialog(int id, Bundle args){
AlertDialog alert = null;
switch(id){
case 0:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Short Clik - Inserts new item\n" +
" Long Click - Deletes Item" +
"\nNew Item's text: old text + new text");
builder.setTitle("Instructions");
builder.setCancelable(false);
builder.setPositiveButton("cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
alert = builder.create();
break;
}
return(alert);
}
}
רונן שלום,
השבמחקהלינק לקבצים לא עובד
הי גיל,
השבמחקאופס...מקווה שהלינק עובד עכשיו.
רונן שלום,
השבמחקהלינק שוב לא עובד.
רונן שלום,
השבמחקיש לי שאלה, ראיתי הרבה את הלייאווט : simple_list_item_1 .
האם זהו לייאווט שאתה מגדיר? ואם כן מה הקוד שלו ?
תודה מראש.
שלום אלדר
השבמחקsimple_list_item_1 זהו קובץ מובנה של אנדרואיד