开发者

Trying to duplicate code in Demo for CWAC Touchlist and getting errors for Android

I have been developing for over 10 years in languages other than Java. I am new to the Android world, but I'm trying to dive right in. I am trying to make a draggable list and I found the wonderful repos https://github.com/commonsguy/cwac-touchlist to do the dragging and dropping of the list items. However, I am getting an error when I am trying to @Override the drop method for the DropListener interface. It states that: "The method drop(int, int) of type new TouchListView.DropListener(){} must override a superclass method"

I tried to implement the way the demo utilizes the TouchList into my application, and I also copied the code exactly in another Action, and I'm getting the same error.

My code:

package bu.homework.shoppinglist;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

import com.commonsware.cwac.tlv.TouchListView;

public class ItemListActivity extends ListActivity {
    private static final int ACTIVITY_CREATE=0;
    private static final int ACTIVITY_EDIT=1;

    private static final int INSERT_ID = Menu.FIRST;
    private static final int DELETE_ID = Menu.FIRST + 1;

    private ItemsModel mDbHelper;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item_list);
        mDbHelper = new ItemsModel(this);
        mDbHelper.open();
        fillList();
        TouchListView itemListView = (TouchListView) getListView();
        itemListView.setDropListener(onDrop);
        System.out.print("On Drop");
        // itemListView.setRemoveListener(onRemove);
        // registerForContextMenu(itemListView);
    }

   private TouchListView.DropListener onDrop = new TouchListView.DropListener() {
        @Override
        public void drop(int from, int to) {
            System.out.print(from);
            System.out.print(to);
        }
    };

    private TouchListView.RemoveListener onRemove = new TouchListView.RemoveListener() {
        public void remove(int which) {

        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        boolean result = super.onCreateOptionsMenu(menu);
        menu.add(0, INSERT_ID, 0, R.string.menu_insert);
        return result;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()) {
            case INSERT_ID:
                createItem();
                return true;
        }

        return super.onMenuItemSelected(featureId, item);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case INSERT_ID:
            createItem();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(0, DELETE_ID, 0, R.string.menu_delete);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId()) {
            case DELETE_ID:
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
            开发者_如何学Go    mDbHelper.deleteItem(info.id);
                fillList();
                return true;
        }
        return super.onContextItemSelected(item);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Intent i = new Intent(this, ItemEditActivity.class);
        i.putExtra(ItemsModel.KEY_ROWID, id);
        startActivityForResult(i, ACTIVITY_EDIT);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        fillList();
    }

    private void createItem() {
        Intent i = new Intent(this, ItemEditActivity.class);
        startActivityForResult(i, ACTIVITY_CREATE);
    }

    private void fillList() {
        // Get all of the notes from the database and create the item list
        Cursor itemCursor = mDbHelper.fetchAllItems();
        startManagingCursor(itemCursor);

        // Create an array to specify the fields we want to display in the list (only NAME)
        String[] from = new String[] { ItemsModel.KEY_NAME };

        // and an array of the fields we want to bind those fields to (in this case just item_row)
        int[] to = new int[] { R.id.item_row };

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.item_row, itemCursor, from, to);
        setListAdapter(notes);
    }

}

The code isn't near complete, but my goal is to combine the functionality of the android tutorial for the notepad with the touchlist.

My question is, what am I doing wrong. Also is there a better way to do drag and drop lists.

Thanks, Chris Swenor


You may be building using Java 1.5. In Java 1.5, you cannot use @Override with interface method definitions. They adopted that with Java 1.6.

However for some reason my drop listener isn't getting triggered.

Nothing leaps out at me as to where you are going wrong, other than I'm not a huge fan of System.out.print(). You might try using breakpoints or Log.w() or something instead to see if the issue is simply in the logging.


It's complaining because you're trying to override a method that doesn't exist. I think the method may be called onDrop, not drop - change it and see if it compiles. Also, if you're using eclipse, click within your drop listener definition and type control+space, and a list of methods to override should come up, I'm guessing you'll see onDrop, not drop.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜