在例子中我们把原来的AndroidGraphics2DTutorial改名为AndroidGra
phics2DTutorial1,重新创建一个类AndroidGraphics2DTutorial来显示示例列表。打算使用三个View来显示列表中的一项,一个图标(例子中随机使用了一些图
标),一个文本框显示示例Activity名称,另一个文本框显示示例的具体信息。在res\layout目录下创建一个
activitylist.xml。内容如下:
这次我们不从AndroidManifest.xml中读取Activity列表,而是使用String
Array资源。在res\value\string.xml 中添加下列Array资源:
<string-array name=”activity_name”> <item>Bezier</item> <item>Brush</item> <item>Colors</item> <item>Font</item> <item>Image</item> <item>Path</item> <item>Pen</item> <item>Shape</item> <item>Transform</item> </string-array> <string-array name=”activity_info”> <item>Bezier</item> <item>Pattern ,Gradients</item> <item>Colors</item> <item>FontDemo, FontTypes</item> <item>DrawMap, JumbleImage, SeeThroughImage</item> <item>Polys, Paths</item> <item>Lines, Dashes, LineCap,LineJoin</item> <item>Oval ,Pear ,Shape2DDemo</item> <item>Transform</item> </string-array>
定义了这些资源后,可以在程序中使用自定义Adapter来显示列表:
class ActivityInfo{ int iconIndex String activityName String activityInfo } class ActivityInfoAdapter extends ArrayAdapter<ActivityInfo>{ int resource public ActivityInfoAdapter(Context context, int resourceId, List<ActivityInfo> objects) { super(context, resourceId, objects) resource=resourceId } @Override public View getView(int position,View ConvertView,ViewGroup parent){ LinearLayout activityInfoView ActivityInfo activityInfo=getItem(position) String activity_Name=activityInfo.activityName String activity_Info=activityInfo.activityInfo int iconIndex=activityInfo.iconIndex if(ConvertView==null){ activityInfoView=new LinearLayout(getContext()) String inflater=Context.LAYOUT_INFLATER_SERVICE LayoutInflater vi vi=(LayoutInflater)getContext().getSystemService(inflater) vi.inflate(resource, activityInfoView,true) }else{ activityInfoView=(LinearLayout)ConvertView } TextView activity_NameView =(TextView)activityInfoView.findViewById(R.id.activityName) TextView activity_InfoView =(TextView)activityInfoView.findViewById(R.id.activityInfo) ImageView iconView =(ImageView)activityInfoView.findViewById(R.id.iconImage) activity_NameView.setText(activity_Name) activity_InfoView.setText(activity_Info) iconView.setImageResource(iconIndex) return activityInfoView } } public class AndroidGraphics2DTutorial extends ListActivity { private ArrayList<ActivityInfo> activityInfos =new ArrayList<ActivityInfo>() private ActivityInfoAdapter aa private final static String packgeName="com.pstreets.graphics2d" @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) Resources res = getResources() String[] activity_Names = res.getStringArray(R.array.activity_name) String[] activity_Infos = res.getStringArray(R.array.activity_info) for(int i=0i<activity_Names.lengthi++){ ActivityInfo activityInfo=new ActivityInfo() activityInfo.activityName=activity_Names[i] activityInfo.activityInfo=activity_Infos[i] activityInfo.iconIndex=R.drawable.icon1+i activityInfos.add(activityInfo) } aa=new ActivityInfoAdapter(this,R.layout.activitylist,activityInfos) setListAdapter(aa) } @Override protected void onListItemClick(ListView l, View v, int position, long id) { ActivityInfo activityInfo = (ActivityInfo) l.getItemAtPosition(position) Intent intent = new Intent() intent.setClassName(this, packgeName+".example." +activityInfo.activityName) startActivity(intent) } }
类ActivityInfo定义列表每个元素的Data Model,为Activity的Icon资源ID,Activity Name以及Activity
Info.
类ActivityInfoAdapter为自定义Adapter,关键的是public View getView(int position,View
ConvertView,ViewGroup parent)。这个函数返回用来显示没个类别元素的View的示例。
方法1:在布局文件中给需要单击事件的按钮添加一个onClick属性。再在MainActivity.java里添加实现代码,如:
public void changeStr(View view) {
textView.setText("按了第1个按钮。")
这个方法适合单个按钮,而且我觉得这个方法好像比较好理解,跟其他编程语文实现按钮功能差不多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)