2014-01-07 205 views
0

我有一个阵列列表,其中有一个元素长按,它显示了一个上下文菜单,我可以删除或编辑列表列表的选定项目。从阵列列表中删除或编辑元素

我的疑问是,我如何定义要选择的项目,以便编辑或删除它?

这些是引用上下文菜单的方法。这是我第一次使用这个菜单,而且我还没有测试过这个功能,所以这些方法可能是错误的。

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    AdapterView.AdapterContextMenuInfo info; 
    info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
     case R.id.edit_travel: 

      return true; 
     case R.id.delete_travel: 

      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

正如我所说的,我认为是缺少确定我想编辑或删除的ArrayList哪一个元素的方式,但我不知道如何定义这个

更新 - 添加的代码

public class TravelListActivity extends ListActivity { 

private static final int REQUEST_CODE_CREATE_TRAVEL = 0; 
private TravelAdapter adapter; 

private class TravelAdapter extends ArrayAdapter<TravelInfo>{ 

    private final Context context; 
    private final ArrayList<TravelInfo> travels; 
    private static final int RESOURCE = android.R.layout.simple_list_item_2; 

    public TravelAdapter(Context context, ArrayList<TravelInfo> travels) { 
     super(context, RESOURCE, travels); 

     this.context = context; 
     this.travels = travels; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     LinearLayout view; 
     ViewHolder holder; 

     if (convertView == null){ 
      view = new LinearLayout(context); 

      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      inflater.inflate(RESOURCE, view, true); 

      holder = new ViewHolder(); 
      holder.text1 = (TextView) view.findViewById(android.R.id.text1); 
      holder.text2 = (TextView) view.findViewById(android.R.id.text2); 
      view.setTag(holder); 

     } else { 
      view = (LinearLayout) convertView; 
      holder = (ViewHolder) view.getTag(); 
     } 

     TravelInfo info = travels.get(position); 
     holder.text1.setText(info.getCity() + " (" + info.getCountry() + ")"); 
     holder.text2.setText(getResources().getString(R.string.year) + " " + info.getYear()); 

     return view; 
    } 

} 

static class ViewHolder { 
    TextView text1; 
    TextView text2; 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    registerForContextMenu(getListView()); 
+0

包含Arraylist初始化的邮政编码。 –

+0

发布您设置'longClickListener'的代码以及'onLongClick'的代码 –

+0

我添加了更多代码...嗯,我没有实现这些方法,如上所述,不确定如何使用上下文菜单还有 – masmic

回答

0

你可以得到它长由以下行按下item

TravelInfo itemSelected = adapter.getItem(info.position); 

例子:

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    TravelInfo itemSelected = adapter.getItem(info.position); 
    switch (item.getItemId()) { 
     case R.id.edit_travel: 

      return true; 
     case R.id.delete_travel: 

      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 

注:对于这项工作(1)你应该已经初始化adapteronCreate(2)通过调用setAdapter(adapter)

0

你可以得到的位置设置列表适配器的选定行列表视图:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item 
        .getMenuInfo(); 

    switch (item.getItemId()) { 
     case R.id.edit_travel: 
     Toast.makeText(getBaseContext(), "edit: "+info.position, Toast.LENGTH_SHORT).show(); 
      return true; 
     case R.id.delete_travel: 
     Toast.makeText(getBaseContext(), "delete: "+info.position, Toast.LENGTH_SHORT).show(); 
      return true; 
          } 
      return false; 
     } 

获取位置后删除/更新它从你的Arraylis在那个位置。 现在,致电notifyDataSetChanged :: youradapter.notifyDataSetChanged();