יום רביעי, פברואר 9

ListView נוסף: הוספה והורדת פריטים אינטראקטיבית

הנה עוד דוגמא עם 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> 



ה-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);

                 }
                     
    }




5 תגובות:

  1. רונן שלום,
    הלינק לקבצים לא עובד

    השבמחק
  2. הי גיל,
    אופס...מקווה שהלינק עובד עכשיו.

    השבמחק
  3. רונן שלום,
    הלינק שוב לא עובד.

    השבמחק
  4. רונן שלום,
    יש לי שאלה, ראיתי הרבה את הלייאווט : simple_list_item_1 .
    האם זהו לייאווט שאתה מגדיר? ואם כן מה הקוד שלו ?
    תודה מראש.

    השבמחק
  5. שלום אלדר
    simple_list_item_1 זהו קובץ מובנה של אנדרואיד

    השבמחק