[英]ListView Item Open New Activity
为了学习Android开发,我仍在关注一些教程,我正在努力开展新的活动。 我只能打开一个活动,实际上ListView
上的所有项目都打开了一个活动,这对于位置0(第一个项目)中的ListView
项(而不是全部)非常ListView
。
我的代码如下:
// Listen for ListView Item Click
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(mContext, MyActivity1.class);
mContext.startActivity(intent);
}
});
return view;
}
如您所见,MyActivity1.class可以很好地打开,但是如果我有一个名为MyActivity2的第二个类,应该由位置1(第二个项)中的listview项打开,该怎么办? 还有(View arg0)是什么意思? 我找不到适当的解释吗?
使用listview OnItemClickListener
listView.setOnItemClickListener( new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
switch(positon)
{
case 0:
Intent intent = new Intent(mContext, MyActivity1.class);
mContext.startActivity(intent);
break;
case 1:
Intent intent = new Intent(mContext, MyActivity2.class);
mContext.startActivity(intent);
break;
}
}
});
position
是列表项的索引。 因此,您可以根据索引开始相应的活动。
没有开关盒的另一种方式
String[] classes ={"MyActivity1","MyActivity2"};
然后在onItemClick
String value = classes[position];
Class ourClass =Class.forName("packagename."+value);
Intent intent = new Intent(mContext,ourClass);
mContext.startActivity(intent);
您可以使用Itemclick列表器。
listviewOBJ.setOnItemClickListener( new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
{
}
});
在这里,您可以使用int position
来确定单击哪个项目。
如果我的理解是正确的,那么这里是您的答案:
对您的主要活动实施OnItemClickListener
:然后将侦听器设置为listview : listView.setOnItemClickListener(this);
最后:
private OnItemClickListener mOnGalleryClick = new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
switch(positon)
{
case 0:
Intent intent = new Intent(mContext, MyActivity1.class);
mContext.startActivity(intent);
break;
case 1:
Intent intent = new Intent(mContext, MyActivity2.class);
mContext.startActivity(intent);
break;
}
}
};
public void onClick(View arg0) {
当您单击某物时,将调用onClick
,并且您单击的是arg0
(您可以将其称为view
, arg0
是如此无用)。
通常,在Buttons
, Views
中通常使用此回调,但不能与ListView
一起使用。
如果要在单击列表视图中的项目时打开某些内容,则应使用setOnItemClickListener
!
在AdapterView.OnItemClickListener
您具有AdapterView<?> parent, View view, int position, long id
参数。
从android doc:
当您编写onItemClick
您应该记住自己在一个匿名类中! 因此,当您需要将上下文传递给new Intent
时,就不能使用this
pastesList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Intent intent = null;
switch (position)
{
case 0:
intent = new Intent(ActivityClass.this, Class1.class);
break;
case 1:
intent = new Intent(ActivityClass.this, Class2.class);
break;
default:
return;
}
startActivity(intent);
}
});
这条线
ActivityClass.this
当你需要使用的类的实例用于ActivityClass
(此时应更换ActivityClass
与类名),但它直接使用您不能访问this
其在这里是指new AdapterView.OnItemClickListener()
在您的代码中,您使用mContext
我不知道它是什么,但是我想它是一个上下文。
下次您没有此变量时,如果需要,请遵循我的建议。
您要使用的是AdapterView.OnItemClickListener
。
final ListView list = ...;
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(mContext, MyActivity1.class);
if (position == 1) {
intent = new Intent(mContext, MyActivity2.class);
}
startActivity(intent);
}
});
lv.setOnItemClickListener(n## Heading ##ew OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
if(position == 1) {
//code specific to first list item
Intent myIntent = new Intent(view.getContext(), Html_file1.class);
startActivityForResult(myIntent, 0);
}
if(position == 2) {
//code specific to 2nd list item
Intent myIntent = new Intent(view.getContext(), Html_file2.class);
startActivityForResult(myIntent, 0);
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.