Android小项目——实现论坛管理

该博客介绍了在Android中如何实现论坛管理功能,重点讲解了ListView的使用,包括配置Adapter、添加CheckBox以及实现长按弹出菜单的效果。示例代码展示了如何创建一个包含标题和内容的ListView,通过HashMap存储数据,并使用SimpleAdapter进行适配。
摘要由CSDN通过智能技术生成

android系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListActivity ,然後用Adapter来显示布局。本例中没有用到ListActivity 。

  ListView是在android中是一个经常用到的控件,ListView里面的每个子项Item可以使用一个字符串,也可以是一个组合控件,下面是本例将要实现的功能清单:

  准备ListView要显示的数据,使用一维或多维 动态数组 保存数据;构建 适配器,适配器就是Item数组,动态数组有多少元素就生成多少个Item;把 适配器 添加到ListView,并显示出来;在ListView的Item添加CheckBox并可以执行单击事件,设置单击事件,对应的Item显示对应Item的数据,通过getChildAt(0)找控件;实现长按后弹出menu对话框效果;本文所实现的ListView如下:

Android小项目——实现论坛管理

UI代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >



<ListView android:id="@+id/ListView01" android:layout_width="wrap_content"

 android:layout_height="wrap_content"></ListView>

</LinearLayout>

设置ListView的 Item样式 xml文件如下:

<RelativeLayout android:id="@+id/RelativeLayout01" 

android:layout_width="fill_parent" android:layout_height="wrap_content"

android:paddingBottom="4dip"

android:paddingLeft="12dip"

android:paddingRight="12dip"

xmlns:android="http://schemas.android.com/apk/res/android">

 

 <CheckBox   android:id="@+id/CheckBox01" 

 android:layout_alignParentRight="true"

 android:paddingTop="12dip"

  android:layout_width="wrap_content" 

  android:focusable="false"

android:layout_height="wrap_content"></CheckBox>


<TextView android:text="TextView1" android:id="@+id/topTextView"

   android:layout_width="fill_parent"

   android:textSize="20dip"

  android:layout_height="wrap_content"></TextView>

<TextView android:text="TextView2" android:id="@+id/bottomTextView"

 android:layout_below="@+id/topTextView" android:layout_width="fill_parent" 

 android:layout_height="wrap_content"></TextView>

</RelativeLayout>

到这一步,顺便解答上面第4个问题:如何设置在 ListView中调协CheckBox之后还可以执行单击或长按事件,在Android中 CheckBox的点击事件优先级比ListView高,当页面一加载时,会默认聚焦在CheckBox上,为了防止这个问题出来,我们要在Android的控件上的属性加上Bool值: android:focusable="false"最后就是Java源代码

package cn.terry;


import java.util.ArrayList;

import java.util.HashMap; 

import android.app.Activity; 

import android.os.Bundle; 

import android.view.ContextMenu;

import android.view.MenuItem;

import android.view.View; 

import android.view.ContextMenu.ContextMenuInfo;

import android.view.View.OnCreateContextMenuListener;

import android.widget.*;

import android.widget.AdapterView.OnItemClickListener;

public class testListViewAcitivity extends Activity {

    private ListView myListView;  

   

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        myListView=(ListView)findViewById(R.id.ListView01);

        

        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("ItemTitle", "文章"+i);

            map.put("ItemText", "Android 小項目"+i);

            listitem.add(map);

       

        

        SimpleAdapter listitemAdapter=new SimpleAdapter(this,//上下文

                listitem, //數據

                R.layout.listview_style,//listItem的xml實現

                new String[]{"ItemTitle","ItemText"}, //從map的批定Key

                new int[]{R.id.topTextView,R.id.bottomTextView} //到要實現的控件上

        );

        

        myListView.setAdapter(listitemAdapter);

        

       myListView.setOnItemClickListener(new OnItemClickListener() {


        @Override

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

                long arg3) { 

            

        

            // TODO Auto-generated method stub 

            RelativeLayout lr=(RelativeLayout)arg1;

            TextView mText=(TextView)lr.getChildAt(1); 

            Toast.makeText(testListViewAcitivity.this, "你點擊了第"+arg2+"項的"+mText.getText().toString(),

                    1000).show();

            

         

         

              

        }

       });

       myListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

        

        @Override

        public void onCreateContextMenu(ContextMenu menu, View v,

                ContextMenuInfo menuInfo) {

            // TODO Auto-generated method stub

            

            ListView lr=(ListView)v;

            RelativeLayout myte=(RelativeLayout)lr.getChildAt(0);

            TextView dd=(TextView)myte.getChildAt(1); 

            menu.setHeaderIcon(R.drawable.icon);

            menu.setHeaderTitle(dd.getText().toString());

            menu.add(1, 0, 0, "高亮");

            menu.add(0, 1, 0, "置頂"); 

        }

    }); 

       

    }

    @Override

    public boolean onContextItemSelected(MenuItem item) {

        // TODO Auto-generated method stub

        String Temp="";

        switch (item.getItemId()) {

        case 0:

            Temp="高亮";

            break;

        case 1:

            Temp="置頂";

            break;

        default:

            break;

        }

        Toast.makeText(this, Temp+"處理", 1000).show();

        return super.onContextItemSelected(item);

    }


    

}

 问题:

  准备ListView要显示的数据,使用一维或多维 动态数组 保存数据;构建 适配器,适配器就是Item数组,动态数组有多少元素就生成多少个Item;把 适配器 添加到ListView,并显示出来;在ListView的Item添加CheckBox并可以执行单击事件,设置单击事件,对应的Item显示对应item的数据,通过getChildAt(0)找控件;实现长按后弹出Menu对话框效果;解答:

  ListView要显示的数据,使用泛型可以方便我们对数据的取舍,使用HashMap,是为了得到key和value之后可以通过key去设置ListView各控件的值项卡中我们用到的代码如下:

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("ItemTitle", "文章"+i);

            map.put("ItemText", "Android 小項目"+i);

            listitem.add(map);

       


ListView支持多种适配器数据 如:SimpleAdapter和ArrayAdapter,本例使用的是SimpleAdapter,先看看simpleAdapter参数列表:

android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数一:上下文,即可以理解为本类;
参数二:支持的数据源,如我们上文定义好的ArrayList<HashMap<String, Object>> ;
参数三:Item的xml实现,上边我们建立了ListView的Item样式XML,用法如:R.layout.listview_style
参数四:字符数组,大致意思可以这样理解,就是“从哪里来”,上文我们通过设置HashMap的键值,可以通过如下方式:new String[]{"ItemTitle","ItemText"},
参数五:整形数组,大致意思引用参数四可以这样理解,“从哪里来,到哪里去”通过事先from的键值to某个控件如:new int[]{R.id.topTextView,R.id.bottomTextView},注意,这里参数五的控件绑定数组要与参数四一一对应;代码如下:

 SimpleAdapter listitemAdapter=new SimpleAdapter(this,//上下文

                listitem, //數據

                R.layout.listview_style,//listItem的xml實現

                new String[]{"ItemTitle","ItemText"}, //從map的批定Key

                new int[]{R.id.topTextView,R.id.bottomTextView} //到要實現的控件上

        );

  在android系统中,ListView的用法稍微复杂一点,配置Adpater就有几种方法,如ArrayAdapter,SimpleAdapter等。查了一些网上的相关例子,有很多都是用ListActivity ,然後用Adapter来显示布局。本例中没有用到ListActivity 。

  ListView是在android中是一个经常用到的控件,ListView里面的每个子项Item可以使用一个字符串,也可以是一个组合控件,下面是本例将要实现的功能清单:

  准备ListView要显示的数据,使用一维或多维 动态数组 保存数据;构建 适配器,适配器就是Item数组,动态数组有多少元素就生成多少个Item;把 适配器 添加到ListView,并显示出来;在ListView的Item添加CheckBox并可以执行单击事件,设置单击事件,对应的Item显示对应Item的数据,通过getChildAt(0)找控件;实现长按后弹出menu对话框效果;本文所实现的ListView如下:
1.png 

  UI代码如下:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:orientation="vertical"
  3.     android:layout_width="fill_parent"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值