FileDocCategorySizeDatePackage
DataList.javaAPI DocAndroid 1.5 API4010Wed May 06 22:41:08 BST 2009com.android.development

DataList.java

/* //device/apps/Notes/NotesList.java
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/
package com.android.development;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import java.util.ArrayList;

public class DataList extends ListActivity
{
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);

        Intent intent = getIntent();

        mCursor = getContentResolver().query(intent.getData(), null, null, null, null);
        mDisplay = intent.getStringExtra("display");
        if (mDisplay == null) {
            mDisplay = "_id";
        }
        
        if (mCursor != null) {
            setListAdapter(new SimpleCursorAdapter(
                    this,
                    R.layout.url_list,
                    mCursor,
                    new String[] {mDisplay},
                    new int[] {android.R.id.text1}));
        }
    }

    public void onStop()
    {
        super.onStop();

        if (mCursor != null) {
            mCursor.deactivate();
        }
    }

    public void onResume()
    {
        super.onResume();

        if (mCursor != null) {
            mCursor.requery();
        }
        
        setTitle("Showing " + mDisplay);
    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);
        menu.add(0, 0, 0, "Requery").setOnMenuItemClickListener(mRequery);
        return true;
    }

    protected void onListItemClick(ListView l, View v, int position, long id)
    {
        mCursor.moveToPosition(position);

        ArrayList<ColumnData> data = new ArrayList<ColumnData>();

        String[] columnNames = mCursor.getColumnNames();
        for (int i=0; i<columnNames.length; i++) {
            String str = mCursor.getString(i);
            ColumnData cd = new ColumnData(columnNames[i], str);
            data.add(cd);
        }


        Uri uri = null;
        int idCol = mCursor.getColumnIndex("_id");
        if (idCol >= 0) {
            uri = Uri.withAppendedPath(getIntent().getData(), mCursor.getString(idCol));
        }
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        intent.setClass(this, Details.class);

        intent.putExtra("data", data);
        int displayColumn = mCursor.getColumnIndex(mDisplay);
        if (displayColumn >= 0) {
            intent.putExtra("title",
                                ((ColumnData)data.get(displayColumn)).value);
        }

        startActivity(intent);
    }

    MenuItem.OnMenuItemClickListener mRequery = new MenuItem.OnMenuItemClickListener() {
        public boolean onMenuItemClick(MenuItem item) {
            // Should just do requery on cursor, but 
            // doesn't work right now.  So do this instead.
            mCursor.requery();
            if (mCursor != null) {
                setListAdapter(new SimpleCursorAdapter(
                        DataList.this,
                        R.layout.url_list,
                        mCursor,
                        new String[] {mDisplay},
                        new int[] {android.R.id.text1}));
            }
            return true;
        }
    };

    private String mDisplay;
    private Cursor mCursor;
}