開發工具:ADT v22.6.2-1085508
target SDK:v4.1.2 JellyBean(API 16)
min SDK:v2.3.3 Gingerbread(API 10)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.contextmenutest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.contextmenutest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.contextmenudemo.MainActivity" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:longClickable="true" > </ListView> </LinearLayout>
main_list_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ListItem" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/TextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text1" android:textAppearance="?android:attr/textAppearanceSmall" /> </LinearLayout>
MainActivity.java
package com.example.contextmenudemo; import java.util.ArrayList; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { ListView listview; String[] values = new String[] { "item1", "item2", "item3", "item4", "item5" }; int pos = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listview = (ListView) findViewById(R.id.listView1); final ArrayList<String> list = new ArrayList<String>(); for(int i=0; i<values.length; ++i) { list.add(values[i]); } MainListAdapter mAdapter = new MainListAdapter (this, list); listview.setAdapter(mAdapter); // 註冊浮動功能表給 view, 在本例為 listview registerForContextMenu(listview); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } // 點選功能表選項的回應碼 @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch(id) { case R.id.action_settings: Toast.makeText(this, "list "+pos+" menu 設定", Toast.LENGTH_LONG).show(); pos = -1; return true; case R.id.action_new: Toast.makeText(this, "list "+pos+" menu 新增", Toast.LENGTH_LONG).show(); pos = -1; return true; case R.id.action_edit: Toast.makeText(this, "list "+pos+" menu 修改", Toast.LENGTH_LONG).show(); pos = -1; return true; } return super.onOptionsItemSelected(item); } // 建立浮動功能表 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // 功能表 和 浮動功能表是可以不同的 // 選項不同, 各自點擊選項時的反應也可不同 // 不過在本例, 偷懶採用同一個功能表 super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; pos = info.position + 1; // 設定浮動功能表的標題欄 menu.setHeaderTitle("選取 "+values[info.position]); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); } // 點選浮動功能表選項的回應碼 @Override public boolean onContextItemSelected(MenuItem item) { // 因為在本例, 浮動功能表 和 功能表 是同一個 // 所以直接將參數傳給功能表的 onOptionsItemSelected() // 讓功能表去處理 return onOptionsItemSelected(item); } }
MainListAdapter.java
package com.example.contextmenudemo; import java.util.List; import android.app.Activity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MainListAdapter extends BaseAdapter { private Activity activity; private List<String> mTextView; private static LayoutInflater inflater = null; public MainListAdapter(Activity a, List<String> str) { activity = a; mTextView = str; inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return mTextView.size(); } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { View vi = convertView; if(convertView==null) { vi = inflater.inflate(R.layout.main_list_item, null); } TextView TextView1 = (TextView) vi.findViewById(R.id.TextView1); TextView1.setText(mTextView.get(position).toString()); return vi; } }
沒有留言:
張貼留言