?? 在ListView選中一行,可以顯示上下文界面如下:
?
?
?
?
在ListView中添加上下文菜單ContextMenu的核心代碼:
//添加上下文事件點擊事件 list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.setHeaderTitle("長按菜單-ContextMenu"); menu.add(0, 0, 0, "彈出長按菜單0"); menu.add(0, 1, 0, "彈出長按菜單1"); } });
?
源代碼如下:
package com.easyway.android.listview; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.view.View.OnCreateContextMenuListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; /** * ListView和上下文菜單的使用 * @author longgangbai * */ public class ListViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //綁定Layout里面的ListView ListView list = (ListView) findViewById(R.id.ListView01); //生成動態數組,加入數據 ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for(int i=0;i<10;i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.icon);//圖像資源的ID map.put("ItemTitle", "Level "+i); map.put("ItemText", "Finished in 1 Min 54 Secs, 70 Moves! "); listItem.add(map); } //生成適配器的Item和動態數組對應的元素 SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//數據源 R.layout.listview,//ListItem的XML實現 //動態數組與ImageItem對應的子項 new String[] {"ItemImage","ItemTitle", "ItemText"}, //ImageItem的XML文件里面的一個ImageView,兩個TextView ID new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText} ); //添加并且顯示 list.setAdapter(listItemAdapter); //添加選中點擊事件 list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { setTitle("點擊第"+arg2+"個項目"); } }); //添加上下文事件點擊事件 list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.setHeaderTitle("長按菜單-ContextMenu"); menu.add(0, 0, 0, "彈出長按菜單0"); menu.add(0, 1, 0, "彈出長按菜單1"); } }); } //長按菜單響應函數 @Override public boolean onContextItemSelected(MenuItem item) { setTitle("點擊了長按菜單里面的第"+item.getItemId()+"個項目"); return super.onContextItemSelected(item); } }
?
ListView中每行的配置信息:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip"> <ImageView android:paddingTop="12dip" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ItemImage" /> <TextView android:text="TextView01" android:layout_height="wrap_content" android:textSize="20dip" android:layout_width="fill_parent" android:id="@+id/ItemTitle" /> <TextView android:text="TextView02" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_below="@+id/ItemTitle" android:id="@+id/ItemText" /> </RelativeLayout>
?
?
主界面的xml配置:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ListView01" /> </LinearLayout>
?
?
下面一個實例:
?
package com.easyway.android.listview; import java.util.ArrayList; import android.app.ListActivity; 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.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.Toast; public class ArrayActivity extends ListActivity { private EditText inputtext; private Button btnadd; private ArrayList<String> list = new ArrayList<String>(); ArrayAdapter<String> adapter; private static final int ITEM1=Menu.FIRST; private static final int ITEM2=Menu.FIRST+1; private static final int ITEM3=Menu.FIRST+2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 這里雖然是繼承了ListActivit,但是如果想使用自己的布局, * ListView中的id必須是“@android:id/list”,否則出錯 */ setContentView(R.layout.ilistview); inputtext = (EditText)findViewById(R.id.edittext); btnadd = (Button)findViewById(R.id.additem); adapter = new ArrayAdapter<String>( this, android.R.layout.simple_expandable_list_item_1, list); //設置適配器 setListAdapter(adapter); //為 ListView 的所有 item 注冊 ContextMenu this.registerForContextMenu(getListView()); btnadd.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { list.add(inputtext.getText().toString()); adapter.notifyDataSetChanged(); inputtext.setText(""); } }); } //設置Context,用來進行刪除操作 @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); list.remove(position); adapter.notifyDataSetChanged(); Toast.makeText(getApplicationContext(), "刪除此項", Toast.LENGTH_SHORT).show(); } /** * 創建ContextMenu菜單 */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("提示信息"); menu.setHeaderIcon(R.drawable.icon); menu.add(0,ITEM1,0,"刪除Item"); menu.add(0,ITEM2,0,"添加Item"); menu.add(0,ITEM3,0,"關于我"); } /** * ContextMenu中選項被選中的事件 */ @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo)item.getMenuInfo(); switch(item.getItemId()) { case ITEM1: //System.out.println("Item id="+item.getItemId()); //System.out.println("position="+getListAdapter().getItemId(menuInfo.position)); /** * getListAdapter().getItemId(menuInfo.position)返回的值是Long型, * 而list.remove(position)是String java.util.ArrayList.remove(int index), * 所以當執行到這里的時候,如果直接使用Long型的話,由于不是int型的,所以默認 * 使用的是:boolean java.util.ArrayList.remove(Object object) * 兩個remove()不匹配,所以重載的是remove(Object object),而這個方法是不能刪除item的 * 所以需要將得到的position強制轉換為int型的才能運行 */ //list.remove(getListAdapter().getItemId(menuInfo.position));這句話是錯誤的 int pos = (int) getListAdapter().getItemId(menuInfo.position); if(list.remove(pos) != null) { System.out.println("success"); } else { System.out.println("failed"); } //通知適配器更新 adapter.notifyDataSetChanged(); Toast.makeText(getApplicationContext(), "刪除此項", Toast.LENGTH_SHORT).show(); break; case ITEM2: list.add("I am android !"); adapter.notifyDataSetChanged(); break; case ITEM3: Toast.makeText(getApplicationContext(), "I am android !", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } }
?
listview的布局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" > <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/additem" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="4" android:text="添加" /> </LinearLayout> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
