| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Android スケルトン ListActivity

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Android スケルトン ListActivity

Android | Android スケルトン |

  • ListActivity を利用するスケルトン
  • メニューとコンテキストメニューを利用

イメージ

メニュー

{{ref_image list_activity01.jpg}}

コンテキストメニュー

{{ref_image list_activity02.jpg}}

Tips

背景色の設定をしても、スクロールすると黒くなってしまう。

android:scrollingCache="false"

Activity

package info.typea.handrawroid;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.ArrayAdapter;
import android.widget.TextView;

/**
 * @author piroto
 */
public class NoteListActivity extends ListActivity {
    
    private static final int MENU_NEW         = Menu.FIRST;
    private static final int MENU_CLOSE       = Menu.FIRST + 1;
    private static final int MENU_PREFERENCES = Menu.FIRST + 2;
    
    private static final int MENU_EDIT        = Menu.FIRST + 3;
    private static final int MENU_SHARE       = Menu.FIRST + 4;
    private static final int MENU_DELETE      = Menu.FIRST + 5;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // コンテキストメニューを登録
        registerForContextMenu(getListView());
        
        List<String> items = new ArrayList<String>();
        // Dummy Data Create From
        for (int i=0; i<10; i++) {
            items.add("dummy item " + i);
        }
        // Dummy Data Create To
        
        NoteAdapter adapter = new NoteListActivity.NoteAdapter(this, R.layout.row_note, items);
        setListAdapter(adapter);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        
        menu.add(0,MENU_NEW,0,R.string.mnu_edit_new)
            .setIcon(android.R.drawable.ic_menu_add);
        menu.add(0,MENU_PREFERENCES,0,R.string.mnu_preferences)
            .setIcon(android.R.drawable.ic_menu_preferences);
        menu.add(0,MENU_CLOSE,0,R.string.mnu_close)
            .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_NEW:
            break;
        case MENU_PREFERENCES:
            break;
        case MENU_CLOSE:
            break;
        default:
            break;
        }
        return true;
    }
    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, MENU_EDIT,    0, R.string.mnu_edit);
        menu.add(0, MENU_SHARE,   0, R.string.mnu_share);
        menu.add(0, MENU_DELETE,  0, R.string.mnu_delete);
    }
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()) {
        case MENU_EDIT:
            break;
        case MENU_SHARE:
            break;
        case MENU_DELETE:
            break;
        default:
            break;
        }
        return true;
    }

    /**
     * @author piroto
     */
    public static class NoteAdapter extends ArrayAdapter<String> {
        private List<String> items;

        public NoteAdapter(Context context, int textViewResourceId, List<String> items) {
            super(context, textViewResourceId, items);
            this.items = items;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            if (view == null) {
                LayoutInflater lif = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = lif.inflate(R.layout.row_note, null);
            }
            String item = this.items.get(position);
            if (item != null) {
                TextView tv = (TextView)view.findViewById(R.id.txt_note_title);
                tv.setText(item);
            }
            return view;
        }
    }
}

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"
    >
    <ListView android:id="@+id/android:list" 
              android:layout_height="wrap_content" 
              android:layout_width="fill_parent">
              
    </ListView>
    <TextView android:text="@string/msg_no_items" 
              android:id="@+id/android:empty" 
              android:layout_width="wrap_content" 
              android:layout_height="wrap_content"
              android:textSize="20sp">
    </TextView>
</LinearLayout>

row_note.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <TextView android:text="" 
              android:id="@+id/txt_note_title" 
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:textSize="24sp" 
              >
    </TextView>
</LinearLayout>

string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, NoteListActivity!</string>
<string name="app_name">Handrawroid</string>
<string name="mnu_edit_new">新規作成</string>
<string name="msg_no_items">アイテムがありません</string>
<string name="mnu_preferences">設定</string>
<string name="mnu_close">終了</string>
<string name="mnu_edit">編集</string>
<string name="mnu_share">共有</string>
<string name="mnu_delete">削除</string>
</resources>