HappyIdiom之六(2)点击动物类列表中的每一项以对话框的形式显示该成语的详细信息

目标:点击动物类列表中的每一项以对话框的形式显示该成语的详细信息

Step1:自定义弹出对话框的布局showview.xml文件

<?xml version="1.0" encoding="utf-8"?>
<!-- 关于页面的xml文件 -->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/bg_ling"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/show_idiom"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:singleLine="false"
            android:textColor="#000000"
            android:textSize="20sp" />
    </LinearLayout>

</ScrollView>

Step2:修改Study_AnimalActivity.java

public class Study_AnimalActivity extends ListActivity {
	private List<Map<String, Object>> data;
	private List<Idiom> idioms;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_study__animal);
		getData();
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, data,
				R.layout.study_animal_item, new String[] { "idiom" },
				new int[] { R.id.idiom }) {
			// 重了基类的getView()方法,将每一项的按钮组件和对应的事件进行绑定
			@Override
			public View getView(final int position, View convertView,
					ViewGroup parent) {
				View view = super.getView(position, convertView, parent);

				final ImageButton imageButton = (ImageButton) view
						.findViewById(R.id.save);
				imageButton.setFocusable(false);//这两句是关键
				imageButton.setFocusableInTouchMode(false);//这两句是关键
				imageButton.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						Toast.makeText(Study_AnimalActivity.this, "收藏喽!",
								Toast.LENGTH_LONG).show();
					}
				});
				return view;
			}
		};
		setListAdapter(simpleAdapter);
       }
	// 当点击列表项的话弹出对话框,不知道为何列表项中出现按钮元素时,此方法就不起作用了?
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);
		Idiom idiom = idioms.get(position);
		String result = idiom.getIdiom() + "\n" + idiom.getSpell() + "\n【解释】: "
				+ idiom.getExplain() + "\n【近义词】: " + idiom.getHomoionym()
				+ "\n【反义词】: " + idiom.getAntonym() + "\n【来源】: "
				+ idiom.getDerivation() + "\n【示例】: " + idiom.getExamples()
				+ "\n【英语翻译】: " + idiom.getEnglish();
		showDialog(result);

	}

	private void showDialog(String result) {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		LayoutInflater layoutInflater = LayoutInflater.from(this);
		View view = layoutInflater.inflate(R.layout.showidiom, null);
		builder.setView(view);
		TextView textView = (TextView) view.findViewById(R.id.show_idiom);
		textView.setText(result);
		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		builder.create().show();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_study__animal, menu);
		return true;
	}

	private void getData() {
		IdiomDao idiomDao = new AnimalDao(this);
		idioms = idiomDao.getIdioms();
		data = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < idioms.size(); i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("idiom", idioms.get(i).getIdiom());
			data.add(map);
		}
	}
}

Step3:运行测试

Tip:这部分在测试时总是达不到想要的效果,点击每个成语并不弹出对话框,通过google搜索发现是因为在列表项中如果出现按钮能够获取焦点的组件时,就会出现无法单击每一列表项的情况。

解决办法:使imageButton不能够获得焦点

imageButton.setFocusable(false);

imageButton.setFocusableInTouchMode(false);//这两句是关键

分析:

由于除了动物类,其他类的成语当打开点击每一项后都要弹出对话框,而这个对话框的效果是统一的,所以我们单独将showDialog方法封装到common包的DetailDialog类里。

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值