当前位置: 首页 > 知识库问答 >
问题:

列表视图单击获取错误的项

越狐若
2023-03-14

我有一个从适配器展开的列表视图。当我点击其中一个按钮时,我得到了错误的项目。在我添加了< code>whatsApp按钮之前,它一直工作正常。

这是我的适配器:

public class shawarmaddapter  extends ArrayAdapter<shawarma> {
String nname;
double lat,lon;

public shawarmaddapter(Context context, List<shawarma> resource) {
    super(context,0, resource);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

   ....

    if (convertView==null)
    {
        convertView= LayoutInflater.from(getContext()).inflate(R.layout.shawarmaddapter,parent,false);
    }
   ....
    waze= (ImageButton)convertView.findViewById(R.id.adapterWazeBTN);
    whats = (ImageButton)convertView.findViewById(R.id.whats);
    locName=name.getText().toString();


....
    nname = sh1.getName();
    name.setText(sh1.getName());
....

    if (sh1.getParking()==1)
        park.setChecked(true);
    else
        park.setChecked(false);

    rate.setRating((float) sh1.getRank());
    rate.setIsIndicator(true);
    listener lis = new listener();
    waze.setOnClickListener(lis);
    whats.setOnClickListener(lis);
    lat=   sh1.getLat();
    lon= sh1.getLon();

    return convertView;
}

在代码中添加了一个onClickListener,如果按下waze按钮,它将检查位置,如果按下whatsapp按钮,则检查名称。这是代码

class listener implements View.OnClickListener{

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.adapterWazeBTN:
                Log.i("a7", "button clicked");

              //  Log.i("a7", lat+" lat,  "+lon+"  lon"+ "distance: "+ sh1.getDistance());

                try
                {
                    String url = "waze://?ll="+lat+","+lon+"&navigate=yes";
                    Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
                    shawarmaList.con. startActivity( intent );
                }
                catch ( ActivityNotFoundException ex  )
                {
                    Intent intent =
                            new Intent( Intent.ACTION_VIEW, Uri.parse( "market://details?id=com.waze" ) );
                    shawarmaList.con.startActivity(intent);
                }
                catch (Exception ex)
                {
                    Log.i("a7",ex.toString());
                }


                break;
            case R.id.whats:
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+nname+"?");
                sendIntent.setType("text/plain");

                try {
                    Toast.makeText(shawarmaList.con.getApplicationContext(),nname,Toast.LENGTH_SHORT).show();
                    shawarmaList.con.startActivity(sendIntent);
                } catch (Exception e) {
                    Log.i("a7",e.getMessage());
                }

                break;


        }
    }
}

如何更改此项以获得正确的项目?

共有3个答案

柏高丽
2023-03-14

而不是,

waze.setOnClickListener(lis);
whats.setOnClickListener(lis);

试试这个,

waze.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            String url = "waze://?ll="+sh1.getLat()+","+sh1.getLon()+"&navigate=yes";
            Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
            shawarmaList.con. startActivity( intent );
        }  catch ( ActivityNotFoundException ex  ) {
            Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( "market://details?id=com.waze" ) );
            shawarmaList.con.startActivity(intent);
        } catch (Exception ex) {
            Log.i("a7",ex.toString());
        }
    }
});

whats.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        try {
            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+sh1.getName()+"?");
            sendIntent.setType("text/plain");

            Toast.makeText(shawarmaList.con.getApplicationContext(),sh1.getName(),Toast.LENGTH_SHORT).show();
            shawarmaList.con.startActivity(sendIntent);
        } catch (Exception e) {
            Log.i("a7",e.getMessage());
        }
    }
});

您将希望将<code>sh1</code>作为最终结果,

final shawarma sh1 = getItem(position);
黄跃
2023-03-14

试试这个:

class listener implements View.OnClickListener{

    shawarma sh;

    listener(shawarma sh1) {
        sh = sh1;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId())
        {
            case R.id.adapterWazeBTN:
                Log.i("a7", "button clicked");

              //  Log.i("a7", sh.getLat()+" lat,  "+sh.getLon()+"  lon"+ "distance: "+ sh.getDistance());

                try
                {
                    String url = "waze://?ll="+sh.getLat()+","+sh.getLon()+"&navigate=yes";
                    Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( url ) );
                    shawarmaList.con. startActivity( intent );
                }
                catch ( ActivityNotFoundException ex  )
                {
                    Intent intent =
                            new Intent( Intent.ACTION_VIEW, Uri.parse( "market://details?id=com.waze" ) );
                    shawarmaList.con.startActivity(intent);
                }
                catch (Exception ex)
                {
                    Log.i("a7",ex.toString());
                }


                break;
            case R.id.whats:
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_TEXT, "do you want to Join me to "+sh.getName()+"?");
                sendIntent.setType("text/plain");

                try {
                    Toast.makeText(shawarmaList.con.getApplicationContext(),sh.getName(),Toast.LENGTH_SHORT).show();
                    shawarmaList.con.startActivity(sendIntent);
                } catch (Exception e) {
                    Log.i("a7",e.getMessage());
                }

                break;


        }
    }
}

然后,当您创建侦听器时,只需像这样传递shwarma对象:

listener lis = new listener(sh1);
阎博易
2023-03-14

你可以这样试试

package com.example.listview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.content.ClipData.Item;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    ListView list;
    ArrayList<String> data;
    ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list=(ListView)findViewById(R.id.listView1);
        data=new ArrayList<String>();
        data.add("List item 1");
        data.add("List item 2");
        data.add("List item 3");
        data.add("List item 4");
        adapter=new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,data);
        list.setAdapter(adapter);

       list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

            String s= Integer.toString(arg2) ; //here arg2 selects the list item
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
            // TODO Auto-generated method stub

        }
    });
    }




    @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;
    }

}
 类似资料:
  • 我创建了一个listview,其中包含一个textview和一个网格视图。网格视图项包含TextView。它看起来如下所示: 在gridview项的最上面的视图组中使用。 在包含GridView的viewgroup中使用。 在包含GridView的viewgroup中使用Android:focusable=“true”Android:focusableIntouchmode=“true”。 我还尝

  • 我在GridView和列表视图之间设计了意图。当我点击gridview的条目时,下一个与listview相关的条目被打开。然后,当我点击列表视图的项目时,新的意图被打开以显示与列表视图的每个项目相关的文本。 有一个带有数组列表的对象,该对象也在数组列表中。网格视图显示列出数组列表的每个对象。显示 Listview 以列出对象中 arraylist 的每个项。 我得到了第一个Girdview和第一个

  • 问题内容: 如图所示,我有一个单击事件连接到我的列表视图。 我需要根据他们单击的列表项将字符串参数传递给新的意图。我要传递的值在名为txt_Genus的列表项中。如何从列表项中获取该值以传递给意图?请不要注意我的实验,哈哈。 问题答案: 这应该做。 然后将其放入意图附加功能中,我想您已经知道这一点。 编辑; 在您的新活动中,您将访问该意图并获得附加包。然后,您可以访问上一个活动中意图放置的任何内容

  • 我有一个带有textView的列表视图,每行都有一个按钮,我试图通过单击按钮而不是通过单击整行来获取文本view方法:(AdapterView arg0,View v,int position,long arg3)不适用于按钮单击。 这就是我如何通过单击列表视图的行来选择项目,但是,我想通过单击按钮而不是整行来选择项目:

  • 问题内容: 我现在正在寻找几天以寻求ListView中可点击项的解决方案。 首先,我遇到了这个问题: **developer.android.com/resources/articles/touch-mode.html** ,发现它没有“正常”的onListItemClick()行为。 然后我遇到了 这段代码 :http : //www.androidsnippets.org/snippets/1

  • 问题内容: 我正在寻找一种列出数据库中所有视图的方法。 最初,我在MySQL论坛上找到并尝试了一个答案: 这怎么行不通,返回一个空集。(我知道他们在那里!) 这些也会失败: 为什么这不起作用? 问题答案: MySQL查询以查找数据库中的所有视图