總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2012年1月1日 星期日

How to use ListView








這是一個應用ListView的小範例, 讓Activity產生一個具有清單效果的條列式資料表.

讓我們在layout中放置一個EditText, 二個Button和一個ListView Widget, 並且預設4筆資料在ListView中, 使用者可自行輸入資料, 新增到ListView中或將ListView中的資料刪除.

為觸發點選列表的事件, 需要實作OnItemClickListener.

不過由於這個範例並沒有建立資料庫, 所以所有的變更在退出AP後就會回到原始狀態了>_<

另外如需要更進階的去增加多筆欄位, 色彩, 文字大小....等, Android API中有提供android.widget.BaseAdaoter物件讓開發者也能透過自行定義的Adapter去設計更豐富的畫面, 甚至還能加入圖檔呢!


ListView_malloc.java
package com.tsots.ListView_malloc;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class ListView_malloc extends Activity
{
 Context context = ListView_malloc.this;
 String tag = "ListView_malloc.this";
 String[] countriesStr;
 TextView myTextView;
 EditText myEditText;
 Button myButton_add;
 Button myButton_remove;
 ListView listview;
 ArrayAdapter adapter2;
 List allData;
 String newData;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  countriesStr = getResources().getStringArray(R.array.array_listview);
  allData = new ArrayList();
  for (int i = 0; i < countriesStr.length; i++)
  {
   allData.add(countriesStr[i]);
  }
  adapter2 = new ArrayAdapter(this,android.R.layout.simple_list_item_1, allData);  
     myTextView = (TextView) findViewById(R.id.myTextView);
     myEditText = (EditText) findViewById(R.id.myEditText);
     myButton_add = (Button) findViewById(R.id.myButton_add);
     myButton_remove = (Button) findViewById(R.id.myButton_remove);
     listview = (ListView) findViewById(R.id.listview1);    
     listview.setAdapter(adapter2);
     myButton_add.setOnClickListener(new Button.OnClickListener()
     {
      public void onClick(View arg0)
      {
       newData = myEditText.getText().toString();
       for (int i = 0; i < adapter2.getCount(); i++)
       {
        if (newData.equals(adapter2.getItem(i)))
        {
         return;
        }
       }       
       if (!newData.equals(""))
       {
        adapter2.add(newData);
        int position = adapter2.getPosition(newData);
        listview.setSelection(position);
        myEditText.setText("");
       }
      }
     });
 
     //替ListView加入被選重的事件
     listview.setOnItemClickListener(new ListView.OnItemClickListener()
     {
      public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) 
      {
       myTextView.setText(allData.get(arg2)); 
       myEditText.setText(allData.get(arg2));
      }
     });

     //當按下"移除"button, 先判別user是否有選中一筆資料
     myButton_remove.setOnClickListener(new Button.OnClickListener()
     {
      public void onClick(View arg0)
      {
       if (myEditText.getText().toString() != "")
       {
        //從ListView移除
        allData.remove(myEditText.getText().toString());
        listview.setAdapter(adapter2);
        myEditText.setText("");
        if (adapter2.getCount() == 0)
        {
         myTextView.setText("");
        }
       }
      }
     });    
 }
}//



沒有留言:

張貼留言