我已经从Vogella那里从http://www.vogella.com/articles/AndroidListView/article.html遵循了有关ListViews的上下文操作模式的教程。

无论如何,我要做的是有些不同。本教程中使用的数据是字符串的初始化数组。但是“我的数据”是从数据库中检索到的对象的列表。我怎样才能做到这一点?先谢谢您的帮助

这是名为MyPerformanceArrayAdapter.java的Custom ArrayAdapter的编码

    package de.vogella.android.listactivity;
    import android.app.Activity;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

     public class MyPerformanceArrayAdapter extends ArrayAdapter<String> {
     private final Activity context;
     private final String[] names;

      static class ViewHolder {
      public TextView text;
      public ImageView image;
      }

      public MyPerformanceArrayAdapter(Activity context, String[] names) {
       super(context, R.layout.rowlayout, names);
       this.context = context;
      this.names = names;
      }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
       View rowView = convertView;
        if (rowView == null) {
        LayoutInflater inflater = context.getLayoutInflater();
        rowView = inflater.inflate(R.layout.rowlayout, null);
         ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) rowView.findViewById(R.id.TextView01);
         viewHolder.image = (ImageView) rowView
      .findViewById(R.id.ImageView01);
       rowView.setTag(viewHolder);
}

ViewHolder holder = (ViewHolder) rowView.getTag();
String s = names[position];
holder.text.setText(s);
if (s.startsWith("Windows7") || s.startsWith("iPhone")
    || s.startsWith("Solaris")) {
  holder.image.setImageResource(R.drawable.no);
} else {
  holder.image.setImageResource(R.drawable.ok);
}

return rowView;
     }
    }


这是初始化String数据的活动代码

    public class MyListActivityActionbar extends ListActivity {

    protected Object mActionMode;
    public int selectedItem = -1;

    public void onCreate(Bundle icicle) {
     super.onCreate(icicle);
     setContentView(R.layout.main);
      String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
    "Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
    "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" };

     MySimpleArrayAdapter adapter = new MySimpleArrayAdapter(this, values);
     setListAdapter(adapter);

      getListView().setOnItemLongClickListener(new OnItemLongClickListener() {

     @Override
       public boolean onItemLongClick(AdapterView<?> parent, View view,
      int position, long id) {

    if (mActionMode != null) {
      return false;
    }
    selectedItem = position;

    // start the CAB using the ActionMode.Callback defined above
    mActionMode = MyListActivityActionbar.this
        .startActionMode(mActionModeCallback);
    view.setSelected(true);
    return true;
  }
});
      }

      private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

// called when the action mode is created; startActionMode() was called
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
  // Inflate a menu resource providing context menu items
  MenuInflater inflater = mode.getMenuInflater();
  // assumes that you have "contexual.xml" menu resources
  inflater.inflate(R.menu.rowselection, menu);
  return true;
}

// the following method is called each time
// the action mode is shown. Always called after
// onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
  return false; // Return false if nothing is done
}

// called when the user selects a contextual menu item
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
  switch (item.getItemId()) {
  case R.id.menuitem1_show:
    show();
    // the Action was executed, close the CAB
    mode.finish();
    return true;
  default:
    return false;
  }
}

// called when the user exits the action mode
public void onDestroyActionMode(ActionMode mode) {
  mActionMode = null;
  selectedItem = -1;
}
    };

     private void show() {
      Toast.makeText(MyListActivityActionbar.this,
        String.valueOf(selectedItem), Toast.LENGTH_LONG).show();
      }

     }

最佳答案

您的适配器类...

public class MyPerformanceArrayAdapter extends ArrayAdapter<String>


应该...

public class MyPerformanceArrayAdapter extends ArrayAdapter<T>


其中T是列表对象,而不是字符串。

这可能会有所帮助:ListView with objects tutorial

10-08 03:31