我正在尝试实现列表视图,每个行都有一个可点击的图像视图,为此我创建了自定义适配器并覆盖其所有方法。现在我的问题是 当我单击此图像视图而不单击该行时它无法正常运行我的代码位于
之下protected void onListItemClick(ListView l,View v,final int position,long id){
super.onListItemClick(l, v, position, id);
RowData rowObject = (RowData) l.getItemAtPosition(position);
contactId= rowObject.getTextId();
//contactId gives the position of the row clicked in the list view.
Log.e("on item clicked", contactId.toString());
ImageView nextView = rowObject.getImageobject();
nextView.setClickable(true);
nextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("Value of row id", String.valueOf(position));
Intent myintent = new Intent(v.getContext(),Info.class);
myintent.putExtra("ContactId", contactId);
v.getContext().startActivity(myintent);
}
});
这里如果我先点击行然后点击图像,那么它工作正常。但是如果我单击图像视图而不点击该行(即没有选择行),则会点击最后一行的位置。
请帮帮我。
答案 0 :(得分:1)
请参阅我的getView函数。因为我有一个对象出现在每个List上。 。 。当我点击通话按钮时,我可以获得点击。
public View getView(final int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
try
{
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.pantry_list_row, null);
}
catch(Exception e)
{
System.out.println("Excption Caught"+e);
}
}
PantreisInfo p = items.get(position);
if (p != null)
{
TextView name = (TextView) v.findViewById(R.id.pantryName);
TextView add1= (TextView) v.findViewById(R.id.pantryAddress1);
TextView add2=(TextView)v.findViewById(R.id.pantryAddress2);
TextView phno = (TextView) v.findViewById(R.id.pantryPhno);
TextView distTime = (TextView) v.findViewById(R.id.distTime);
//
if (name != null)
{
name.setText(p.getName().get(0).toString());
}
if (add1 != null)
{
add1.setText(p.getAddress1().get(0).toString());
}
if (add2 != null)
{
add2.setText(p.getAddress2().get(0).toString());
}
if (phno != null)
{
phno.setText(p.getPhone().get(0).toString());
}
if (distTime!= null)
{
distTime.setText("Distribution Time: "+p.getDistTime().get(0).toString());
}
}
ImageView phbtn=(ImageView)v.findViewById(R.id.phbtn);
phbtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View arg0)
{
final AlertDialog.Builder dialog=new AlertDialog.Builder(PantriesListActivity.this);
PantreisInfo p=items.get(position);
String tempPhone=p.getPhone().get(0).toString();
String phoneNumber="";
for(int i=0;i<tempPhone.length();i++)
{
if (Character.isDigit(tempPhone.charAt(i)))
{
System.out.println(tempPhone.charAt(i));
phoneNumber=phoneNumber+tempPhone.charAt(i);
}
}
dialog.setMessage("Press ok to Dial "+phoneNumber+",otherwise click on cancel to discard.");
final String number="tel:" +phoneNumber.trim();
dialog.setPositiveButton("Ok",new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface arg0, int arg1)
{
// TODO Auto-generated method stub
Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse(number));
startActivity(callIntent);
dialog.setCancelable(true);
}
});
dialog.setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dfdialog, int which)
{
// TODO Auto-generated method stub
dialog.setCancelable(true);
}
});
dialog.show();
//Toast.makeText(PantriesListActivity.this,""+p.getPhone().get(0), Toast.LENGTH_SHORT).show();
}
});
return v;
}
答案 1 :(得分:0)
好吧最后在列表视图中挖掘了这么多我自己得到了一个解决方案,那就是自定义适配器的getView方法,现在每当我点击图像时,查看getview的(int position)参数给出了行的位置clicked.here我的代码,我后来实现了。
private class CustomAdapter extends ArrayAdapter<RowData> {
public CustomAdapter(Context context,int resource,int textViewResourceId,List<RowData> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
TextView Name = null;
TextView JobTitle = null;
ImageView Emailimage = null;
ImageView Phoneimage = null;
ImageView nextView = null;
RowData rowData = getItem(position);
if(null == convertView){
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.contact_found_list_item_row, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
String positionId = String.valueOf(position);
holder = (ViewHolder) convertView.getTag();
Name = holder.gettitle();
Name.setText(rowData.mTitle);
JobTitle = holder.getdetail();
JobTitle.setText(rowData.mDetail);
Emailimage=holder.getImage();
Emailimage.setImageResource(rowData.phoneId);
Phoneimage = holder.getphoneImage();
Phoneimage.setImageResource(rowData.emailId);
nextView = holder.getNextViewObject();
nextView.setTag(positionId);
nextView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ImageView iv = (ImageView)v;
String rowid = (String)iv.getTag();
Intent myintent = new Intent(v.getContext(),Info.class);
myintent.putExtra("ContactId", rowid);
v.getContext().startActivity(myintent);
}
});
return convertView;
}
private class ViewHolder {
private View mRow;
private TextView Name = null;
private TextView JobTitle = null;
private ImageView Emaillogo = null;
private ImageView phonelogo = null;
private ImageView nextViewlogo = null;
public ViewHolder(View row) {
mRow = row;
}
public TextView gettitle() {
if(null == Name){
Name = (TextView) mRow.findViewById(R.id.txtfirstname);
}
return Name;
}
public TextView getdetail() {
if(null == JobTitle){
JobTitle = (TextView) mRow.findViewById(R.id.txtjobtitle);
}
return JobTitle;
}
public ImageView getImage() {
if(null == Emaillogo){
Emaillogo = (ImageView) mRow.findViewById(R.id.emaillogo);
}
return Emaillogo;
}
public ImageView getphoneImage(){
if(null == phonelogo){
phonelogo = (ImageView) mRow.findViewById(R.id.mobilelogo);
}return phonelogo;
}
public ImageView getNextViewObject(){
if(null == nextViewlogo){
nextViewlogo = (ImageView)mRow.findViewById(R.id.nextbutton);
}return nextViewlogo;
}
}