我有一个从适配器展开的列表视图。当我点击其中一个按钮时,我得到了错误的项目。在我添加了< 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;
}
}
}
如何更改此项以获得正确的项目?
而不是,
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);
试试这个:
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);
你可以这样试试
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查询以查找数据库中的所有视图