点击ListView弹出上下⽂菜单
1. 在开发的过程中有的时候需要使⽤到ListView控件(列表控件)来显⽰当前的列表信息,在点击列表项有的时候需要结合上下⽂菜单⼀起使⽤
2. 下⾯是⼀个点击列表控件ListView来弹出上下⽂菜单的例⼦:
思路分析如下:
① ⾸先需要在页⾯中显⽰的是ListView的每⼀项,这个我们结合数据适配器来实现
a)先在布局⽂件中声明⼀个ListView控件
b)初始化数据适配器,适配器中需要⼀个当前的上下⽂对象,使⽤getApplicationContext⽅法来获取,第⼆个参数传进去的是组成ListView的每⼀个列表项,这⾥可以创建⼀个布局⽂件然后声明⼀个TextView既可以了,第三个参数传进去的是数据适配器的数据源,即数据从哪⾥获取,这个可以使⽤⼀个字符串数组进⾏数据的获取或者从⾃定义的资源⽂件中来获取然后转为⼀个字符串数组也可以
c)为ListView注册数据适配器
② 点击ListView控件弹出上下⽂菜单与点击普通的Button按钮的实现实际上是⼀样的,对于Button⽽⾔需要绑定的是setOnClickListener,⽽对于ListView⽽⾔绑定的是setOnItemClickListener,两个控件需要重写MainActivity的创建上下⽂菜单的setOnCreateContextMenuListener都是⼀样的,在重写的⽅法⾥⾯要创建相应的菜单项,这样在弹出上下⽂菜单的时候才会显⽰,下⾯第⼀个是Button点击之后弹出上下⽂菜单代码(backgroundSet为Button按钮),第⼆个是点击ListView之后显⽰上下⽂菜单的代码,⼀般来说,点击控件之后弹出上下⽂菜单之后需要获取点击的是哪⼀项菜单,所以需要重写Activity类的onContextItemSelected⽅法,这样对点击事件才有意义,因为这样进⾏相应的处理,下⾯的例⼦没有实现这个⽅法的重写
backgroundSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
backgroundSet.showContextMenu();
}
});
backgroundSet.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo contextMenuInfo) {
menu.add(1, 1, 1, "⽩");
menu.add(1, 2, 1, "浅红");
menu.add(1, 3, 1, "浅绿");
menu.add(1, 4, 1, "浅蓝");
}
});
下⾯是点击ListView控件的Java代码实现:
p7_3;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
listview控件在哪里ListView listView;
//下⾯使⽤xml⽂件来获取数据
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);
String data[] = getResources().getStringArray(R.array.fileOperator);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.listview,data);        listView.setAdapter(arrayAdapter);
//ListView的点击监听事件
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int checkedId,
long resId) {
listView.showContextMenu();
}});
listView.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo contextMenuInfo) {
menu.setHeaderTitle("⽂件操作");
menu.add(1, 1, 1, "复制");
menu.add(1, 2, 1, "粘贴");
menu.add(1, 3, 1, "重命名");
menu.add(1, 4, 1, "剪切");
}});
}
}
3. 下⾯是这个例⼦的布局⽂件的代码:
① l
<LinearLayout xmlns:android="schemas.android/apk/res/android"
xmlns:tools="schemas.android/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
② 传进数据适配器的ListView的每⼀项布局l
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="schemas.android/apk/res/android"    android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:textColor="#4169E1"
android:textSize="18sp"
android:padding="10dp">
</TextView>
4. 代码运⾏截图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。