?? 在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);
//生成動態(tài)數(shù)組,加入數(shù)據(jù)
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和動態(tài)數(shù)組對應(yīng)的元素
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//數(shù)據(jù)源
R.layout.listview,//ListItem的XML實現(xiàn)
//動態(tài)數(shù)組與ImageItem對應(yīng)的子項
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");
}
});
}
//長按菜單響應(yīng)函數(shù)
@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);
//設(shè)置適配器
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("");
}
});
}
//設(shè)置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();
}
/**
* 創(chuàng)建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,"關(guān)于我");
}
/**
* 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),
* 所以當(dāng)執(zhí)行到這里的時候,如果直接使用Long型的話,由于不是int型的,所以默認
* 使用的是:boolean java.util.ArrayList.remove(Object object)
* 兩個remove()不匹配,所以重載的是remove(Object object),而這個方法是不能刪除item的
* 所以需要將得到的position強制轉(zhuǎn)換為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>
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

