当筵意气临九霄,星离雨散不终朝。这篇文章主要讲述带有onClick项目的Android ListView相关的知识,希望能为你提供帮助。
我是一名新的程序员,也是android的新手。我正在使用这个例子http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/,它很棒。
现在我想让这些项目(戴尔,三星Galaxy S3等)调用一个函数来打开一个具有不同信息的新活动。
例如:
如果我联系戴尔,新的活动必须显示给我有关戴尔的信息。如果我触摸三星,同样的事情。
我用谷歌搜索,但找不到任何有用的,任何提示?我认为这是基本的,但我是新手,所以我真的不知道从哪里开始
答案在您的活动中,您定义了列表视图
你写
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<
?>
adapter,View v, int position){
ItemClicked item = adapter.getItemAtPosition(position);
Intent intent = new Intent(Activity.this,destinationActivity.class);
//based on item add info to intent
startActivity(intent);
}
});
在您编写的适配器的getItem中
public ItemClicked getItem(int position){
return items.get(position);
}
另一答案你用意图开始新的活动。将数据发送到intent的一种方法是传递在intent中实现parcelable的类。请注意,您正在传递该课程的副本。
http://developer.android.com/reference/android/os/Parcelable.html
在这里,我有一个onItemClick。我创建了intent并将整个类putExtra放入intent中。我发送的课程已经实现了parcelable。提示:您只需要在重新创建类所需的最低限度上实现parseable。也许是一个文件名或类似字符串的东西,构造函数可以用它来创建类。新活动可以稍后getExtras,它实际上是使用其构造方法创建类的副本。
在这里,当我在listview中收到onclick时,我启动了my app的xmlreader类。
注意:下面的摘要是我传递的类的列表,因此get(position)返回类infact它是填充listview的相同列表
List<
KmlSummary>
summary = null;
...public final static String EXTRA_KMLSUMMARY = "com.gosylvester.bestrides.util.KmlSummary";
...@Override
public void onItemClick(AdapterView<
?>
parent, View view, int position,
long id) {
lastshownitem = position;
Intent intent = new Intent(context, KmlReader.class);
intent.putExtra(ImageTextListViewActivity.EXTRA_KMLSUMMARY,
summary.get(position));
startActivity(intent);
}
稍后在新活动中,我将用可解析的类拉出来
kmlSummary = intent.getExtras().getParcelable(
ImageTextListViewActivity.EXTRA_KMLSUMMARY);
//note:
//KmlSummary implements parcelable.
//there is a constructor method for parcel in
// and a overridden writetoparcel method
// these are really easy to setup.public KmlSummary(Parcel in) {
this._id = in.readInt();
this._description = in.readString();
this._name = in.readString();
this.set_bounds(in.readDouble(), in.readDouble(), in.readDouble(),
in.readDouble());
this._resrawid = in.readInt();
this._resdrawableid = in.readInt();
this._pathstring = in.readString();
String s = in.readString();
this.set_isThumbCreated(Boolean.parseBoolean(s));
}@Override
public void writeToParcel(Parcel arg0, int arg1) {
arg0.writeInt(this._id);
arg0.writeString(this._description);
arg0.writeString(this._name);
arg0.writeDouble(this.get_bounds().southwest.latitude);
arg0.writeDouble(this.get_bounds().southwest.longitude);
arg0.writeDouble(this.get_bounds().northeast.latitude);
arg0.writeDouble(this.get_bounds().northeast.longitude);
arg0.writeInt(this._resrawid);
arg0.writeInt(this._resdrawableid);
arg0.writeString(this.get_pathstring());
String s = Boolean.toString(this.isThumbCreated());
arg0.writeString(s);
}
祝你好运Danny117
另一答案你绝对应该扩展你
ArrayListAdapter
并在你的getView()
方法中实现它。如果它的值是View
,那么第二个参数(一个null
)应该膨胀,利用它并??在膨胀后将其设置为onClickListener()
。将它称为你的第二个
getView()
的参数称为convertView
:convertView.setOnClickListener(new View.OnClickListener() {
public void onClick(final View v) {
if (isSamsung) {
final Intent intent = new Intent(this, SamsungInfo.class);
startActivity(intent);
}
else if (...) {
...
}
}
}
如果你想了解如何扩展
ArrayListAdapter
的一些信息,我推荐这个link。另一答案在您的
onitemClick
中,您将发送选定的值,如deal
,并在打开新活动时将其发送到您的意图中,并在您的新活动中获取发送的数据并与所选项目相关将显示您的数据从
list
获取名称String item = yourData.get(position).getName();
以意图设置数据
intent.putExtra("Key", item);
在第二个活动中获取数据
getIntent().getExtras().getString("Key")
另一答案
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<
?>
parent, View view, int position, long id) {Intent i = new Intent(getActivity(), DiscussAddValu.class);
startActivity(i);
}
});
另一答案
listview.setOnItemClickListener(new OnItemClickListener(){@Override
public void onItemClick(AdapterView<
?>
adapter,View v, int position){
Intent intent;
switch(position){
case 0:
intent = new Intent(Activity.this,firstActivity.class);
break;
case 1:
intent = new Intent(Activity.this,secondActivity.class);
break;
case 2:
intent = new Intent(Activity.this,thirdActivity.class);
break;
//add more if you have more items in listview
//0 is the first item 1 second and so on...
}
startActivity(intent);
}});
另一答案什么样的地狱实施Parcelable?
他正在传递给适配器String []
- get item(String)at position
- 创造意图
- 把它作为额外的
- 开始活动
- 在活动中得到额外的
描述产品的示例类:
public class Product {
private String _name;
private String _description;
private int _idpublic Product(String name, String description,int id) {
_name = name;
_desctription = description;
_id = id;
}public String getName() {
return _name;
}public String getDescription() {
return _description;
}
}Product dell = new Product("dell","this is dell",1);
HashMap<
String,Product>
_hashMap = new HashMap<
>
();
_hashMap.put(dell.getName(),dell);
然后你传递到适配器密钥集:
String[] productNames =_hashMap.keySet().toArray(new String[_hashMap.size()]);
当在适配器u返回视图时,你设置这样的监听器,例如:
@Override
public View getView(int position, View convertView, ViewGroup parent) {Context context = parent.getContext();
String itemName = getItem(position)someView.setOnClikListener(new MyOnClickListener(context, itemName));
} private class MyOnClickListener implements View.OnClickListener { privateString _itemName;
privateContext _contextpublic MyOnClickListener(Context context, String itemName) {
_context = context;
_itemName = itemName;
}@Override
public void onClick(View view) {
//------listener onClick example method body ------
Intent intent = new Intent(_context, SomeClassToHandleData.class);
intent.putExtra(key_to_product_name,_itemName);
_context.startActivity(intent);
}
}
然后在其他活动中:
@Override
public void onCreate(Bundle) {String productName = getIntent().getExtra(key_to_product_name);
Product product = _hashMap.get(productName);
}
* key_to_product_name是一个公共静态字符串,用作额外的键
PS。对不起错字我很着急:) ps2。这个shoud让你知道如何做到这一点ps3。当我有更多时间,我会添加一个详细的描述
我的评论:
- 请勿使用任何开关声明
- 不要为每个产品创建单独的活动(仅需要一个)
this
或Context.this
的上下文引用替换为getapplicationcontext
来解决整个问题。另一答案
listview.setOnItemClickListener(new OnItemClickListener(){//setting onclick to items i
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 将Button链接到android中的现有活动
- Android应用开始和结束事件
- 将App发送回最近的应用程序堆栈android
- 全屏应用程序android
- 当用户关闭屏幕android时,使应用程序正常工作
- 我没有在我的Android回收站视图中看到mp3文件名,而是看到了他们的链接
- Android - Firebase addChildEventListener触发器[重复]
- Android微调器没有显示Firebase实时数据库数据()
- Android通知会多次打开,而不是只打开一次