Android 如何在alistView.setOnItemClickListener(新建OnItemClickListener(){}中启动两个不同的意图
我是android新手,有点困惑。我有一个包含图像和文本的列表视图。如果我点击一个图像,它应该启动一个活动,如果我点击另一个活动的文本 化学需氧量: 在Android 如何在alistView.setOnItemClickListener(新建OnItemClickListener(){}中启动两个不同的意图,android,android-intent,android-listview,Android,Android Intent,Android Listview,我是android新手,有点困惑。我有一个包含图像和文本的列表视图。如果我点击一个图像,它应该启动一个活动,如果我点击另一个活动的文本 化学需氧量: 在 onCrete(){ listView=getListView();} myBaseAdapterItemActivity=新的myBaseAdapterItemActivity( ItemActivity.this、placeNameList); setListAdapter(myBaseAdapterItemActivity); myBas
onCrete(){
listView=getListView();}
myBaseAdapterItemActivity=新的myBaseAdapterItemActivity(
ItemActivity.this、placeNameList);
setListAdapter(myBaseAdapterItemActivity);
myBaseAdapterItemActivity.notifyDataSetChanged();
setTextFilterEnabled(true);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(适配器视图适配器、视图、,
内部位置,长id){
//我可以毫无问题地开始一项活动
//在xml文件中,我将image clicable设置为true。
//我想做的就是这样
if(view.getId()==R.id.imageId)
{
Intent Intent=新的Intent(这个,ImageActivity.class);
星触觉(意向);
}
else if(view.getID==R.id.textId)
{
Intent Intent=新的Intent(这个,TextActivity.class);
星触觉(意向);
}
}}
每当我点击图片时,它也不会出现在文本视图中。
您的
MyBaseAdapterItemActivity
,setOnClickListener((OnCLickListener)mContext)
中的任何想法都将显示在ImageVIew和TextView中
在活动中,扩展OnClickListener
。
根据列表项xml中的
v.getId()
,在OnClick(View v)
中为set-android:OnClick=“onFirstLinkClick”和类似的图像视图编写startActivity(Intent)
,
并在活动中使用以下方法
public void onFirstLinkClick(View V) {
}尝试使用以下代码。
您的适配器应该如下代码所示。然后,您的文本和图像单击将创建新活动
嗨,代码应该如下所示,希望这对你有帮助
package com.example.listwithclick;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
ListView listView1;
Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity=this;
listView1=(ListView)findViewById(R.id.listView1);
listView1.setAdapter(new MyAddapter(MainActivity.this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class MyAddapter extends BaseAdapter {
Context rContext;
private LayoutInflater rInflater;
public MyAddapter(Context c) {
rInflater = LayoutInflater.from(c);
rContext = c;
}
public MyAddapter(Activity imagebinding) {
// TODO Auto-generated constructor stub
activity = imagebinding;
rContext = imagebinding;
rInflater = LayoutInflater.from(imagebinding);
rContext = imagebinding;
rInflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
convertView = rInflater.inflate(R.layout.child, null);
final MyDat mydat = new MyDat();
mydat.textview = (TextView) convertView.findViewById(R.id.textView1);
mydat.textview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(rContext, "text", 1000).show();
Intent image= new Intent(rContext,TextActivity.class);
startActivity(image);
}
});
mydat.imageView1=(ImageView)convertView.findViewById(R.id.imageView1);
mydat.imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(rContext, "image ", 1000).show();
Intent image= new Intent(rContext,ImageActivity.class);
startActivity(image);
}
});
return convertView;
}
class MyDat {
TextView textview;
ImageView imageView1;
}
}
}
它有两种解决方案:
1) 相反,在为列表编写onItemClickListener时,您可以在getview方法中的自定义适配器中对textview和imageview进行findviewbyid,然后在这两个适配器上设置onclick侦听器
2) 您可以使用getChildAt方法。。。。并检查哪个孩子是您的imageview,哪个孩子是您的textview。这是一个没有太多保证的解决办法。在MyBaseAdapterItemActivity中的每个ImageView和TextView上设置onClickListener,您不必使用SetOnItemClickListener。您的列表中是否有一些可触摸的组件?请查看以下链接:。您的注释“In xml File I set for image clickable to true”表示您的图像获得焦点(用于单击事件)。您能将android:focusableInTouchMode=“false”添加到您的imageview吗?另外,你能检查一下你在view.getID()中是否得到了正确的ID吗?@Chor WaiChun你能为MyBaseAdapterItemACtivity提供一些代码吗?在主要活动中,我想你可以通过它的Rajesh4Uguys参考答案,只需参考getView方法,其他部分会让你感到困惑,我想你已经完成了其他部分。你看了视图的焦点了吗?(正如我所建议的)。我得到以下错误,它不允许我实现。很抱歉,格式不好,但由于回答时间的关系,我现在无法回答,所以我决定写一条评论。Any idea holder.imageMap.setOnClickListener(新OnClickListener(){@Override public void onClick(视图v){//TODO自动生成的方法存根意图=新意图((OnClickListener)mContenxt,ActivityName.class);//错误构造函数意图((OnClickListener)mContext,Classnot found>)is}//END baseadapter图像和文本都有一些共同点。这意味着通过单击它们中的每一个都应该带有一些标识符。holder.imageMap.setOnClickListener((OnClickListener)mContenxt);holder.textView.setOnClickListener((OnClickListener)mContenxt);但是我如何检查主活动中的哪个活动应该startholder.imageMap.setonClickListener(新onClickListener(){在onclick方法中,您可以传递需要打开的意图。作为意图I=新意图(getActivityContext,ImageActivity.class);getActivityContext.startActivity(I);它抛出了一个错误,我正在做完全相同的操作。在android.widget.AbsListView.obtainView(AbsListView.java:2461)如果再次出现错误,只需清理项目并运行,然后检查导致问题的行……我希望在单击时启动意图,这意味着如果我单击图像,则必须启动ImageActivity,如果单击文本,则必须启动TextActivity。但我无法在onClick()中启动活动我得到的错误如下:com.project.test.Adapters.MyBaseAdapterItemActivity.getView(MyBaseAdapterItemActivity.java:82)中的java.lang.NullPointerException位于android.widget.AblistView.GetainView(AblistView.java:2461)等等,所以它不允许我从这里下载完整的源代码Thnx,我今天稍后会尝试,您的工作非常完美,在我的例子中是mydat.imageView1.setOnClickListener(new OnClickListener(){@Override public void onClick(View v){//TODO自动生成的方法存根Toast.makeText(rContext,“image”,1000).show();Intent image=newintent(rContext,ImageActivity.class);startActivity(image);};thrwos错误:在android.widget.AbsListView.obtainView(AbsListView.java:2461)中,文本有效,但ImageView无效。我稍后将发送我的BaseAdapter类,因为现在由于论坛原因无法发送。
package com.example.listwithclick;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
ListView listView1;
Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity=this;
listView1=(ListView)findViewById(R.id.listView1);
listView1.setAdapter(new MyAddapter(MainActivity.this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class MyAddapter extends BaseAdapter {
Context rContext;
private LayoutInflater rInflater;
public MyAddapter(Context c) {
rInflater = LayoutInflater.from(c);
rContext = c;
}
public MyAddapter(Activity imagebinding) {
// TODO Auto-generated constructor stub
activity = imagebinding;
rContext = imagebinding;
rInflater = LayoutInflater.from(imagebinding);
rContext = imagebinding;
rInflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 10;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
convertView = rInflater.inflate(R.layout.child, null);
final MyDat mydat = new MyDat();
mydat.textview = (TextView) convertView.findViewById(R.id.textView1);
mydat.textview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(rContext, "text", 1000).show();
Intent image= new Intent(rContext,TextActivity.class);
startActivity(image);
}
});
mydat.imageView1=(ImageView)convertView.findViewById(R.id.imageView1);
mydat.imageView1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(rContext, "image ", 1000).show();
Intent image= new Intent(rContext,ImageActivity.class);
startActivity(image);
}
});
return convertView;
}
class MyDat {
TextView textview;
ImageView imageView1;
}
}
}