您的位置:首页 > 移动开发 > Android开发

Android samples API Demos之UI篇1(ActionBarCompat-ListPopupMenu)

2015-09-22 15:48 477 查看

Android ActionBarCompat-ListPopupMenu Sample

This sample shows how to display a pop up menu using PopupMenu from the v7 appcompat library.

此示例演示如何使用 v7 appcompat 库中的弹出菜单来显示一个弹出菜单。

项目下载地址:http://download.csdn.net/detail/a599231042/9130889

目录结构:



上一篇讲ActionBarCompat-Basic时还没有发现这么个有趣的东西,测试类,等下讲完项目之后说说这个测试类。

public class MainActivity extends ActionBarActivity {

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

// Set content view (which contains a PopupListFragment)
setContentView(R.layout.sample_main);
}

}

MainActivity 类中并没有什么东西,而是通过R.layout.sample_main加载了一个ListFragment[code]<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.android.actionbarcompat.listpopupmenu.PopupListFragment" />

[/code]



public class PopupListFragment extends ListFragment implements View.OnClickListener {

public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

// We want to allow modifications to the list so copy the dummy data array into an ArrayList
ArrayList<String> items = new ArrayList<String>();
for (int i = 0, z = Cheeses.CHEESES.length ; i < z ; i++) {
items.add(Cheeses.CHEESES[i]);
}

// Set the ListAdapter
setListAdapter(new PopupAdapter(items));//这里绑定了一个定义为内部类的Adapter

}
Cheeses类就是一个数组
通过覆盖实现了onListItemClick方法public void onListItemClick(ListView listView, View v, int position, long id) {
String item = (String) listView.getItemAtPosition(position);
Toast.makeText(getActivity(), "Item Clicked: " + item, Toast.LENGTH_SHORT).show();
}
class PopupAdapter extends ArrayAdapter<String> {
PopupAdapter(ArrayList<String> items) {
super(getActivity(), R.layout.list_item, android.R.id.text1, items);
}

@Override
public View getView(int position, View convertView, ViewGroup container) {
View view = super.getView(position, convertView, container);
View popupButton = view.findViewById(R.id.button_popup);
popupButton.setTag(getItem(position));
popupButton.setOnClickListener(PopupListFragment.this);
return view;
}
}
这里的setOnClickListener(PopupListFragment.this)就是PopupListFragment
通过接口implements View.OnClickListener实现了onClick的方法
public void onClick(final View view) {
//这里系统自带一段说明,是说因为在弹出PopupMenu之前可能位置(position)会发生改变,为了保证在正确的地方弹出所以使用了Runnable。
view.post(new Runnable() {
@Override
public void run() {
showPopupMenu(view);
}
});
}
showPopupMenu没有什么多余的东西,主要是通过PopupMenu 来弹出菜单,然后remove掉Adapter中的数据
private void showPopupMenu(View view) {
final PopupAdapter adapter = (PopupAdapter) getListAdapter();
final String item = (String) view.getTag();
PopupMenu popup = new PopupMenu(getActivity(), view);
popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.menu_remove:
// Remove the item from the adapter
adapter.remove(item);
return true;
}
return false;
}
});
popup.show();
}

}


好了,东西就这么多,下面说说项目中的测试类:

首先是AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.actionbarcompat.listpopupmenu.tests"
android:versionCode="1"
android:versionName="1.0">
<application>
<uses-library android:name="android.test.runner" /><!--这个library是必须的-->
</application>
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.android.actionbarcompat.listpopupmenu"<!--目标包名-->
android:label="Tests for com.example.android.actionbarcompat.listpopupmenu" />

</manifest>


测试类

public class SampleTests extends ActivityInstrumentationTestCase2<MainActivity> {

private MainActivity mTestActivity;
private PopupListFragment mTestFragment;

public SampleTests() {
super(MainActivity.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();
mTestActivity = getActivity();
mTestFragment = (PopupListFragment)
mTestActivity.getSupportFragmentManager().getFragments().get(0);
}

//mTestActivity,mTestFragment是否为空,为空就报错
public void testPreconditions() {
assertNotNull("mTestActivity is null", mTestActivity);
assertNotNull("mTestFragment is null", mTestFragment);
}

}


示例图片:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: