ListView的点击事件传递值
之前我们学习到了getView方法和点击事件,那么接下来,会继续学习到,我们在点击一个item行时,启动另外一个Activity,并把该item行的文本(当然也包括图片),传递到那个Activity中去。
类似以下效果:
在自定义Adapter中,有一个方法,叫
public Object getItem(int position) {
return list.get(position);
}
它的作用是取得当前position的位置,我们可以根据这个,利用自定义Adapter中的Map集合,来取得文本或者其他对应的详细内容。
MyAdapterlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent();
intent.setClass(MyAdapterActivity.this, Main2Activity.class);
HashMap<String, Object> itemMap = (HashMap<String, Object>) parent.getItemAtPosition(position);
String title = (String) itemMap.get("tvText");
intent.putExtra("key", title);
startActivity(intent);
}
});
为什么用的是HashMap呢?之前我们在做SimpleAdapter的时候:
Map集合里装的是Hash表,我们就利用Hash表进行索引,找出key值为"tvText"的参数。然后通过intent.putExtra 将该string传递到另外一个Activity中。
在被启动的Activity中取得传递值:
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TextView tvtv = (TextView) findViewById(R.id.tvtvtvt);
Intent intent = getIntent();
String tilte = intent.getStringExtra("key");
tvtv.setText(tilte);
}
这样,就可以获取到传递过来的值了。
使用接口在getView方法中实现点击事件
1.创建接口
2.自定义继承BaseAdapter类里声明接口变量,并写set方法
3.getView方法中的点击事件
4.MainActivity中实现接口 -implements接口
5.传递context
或者在自定义adapter中直接使用context来实现点击:
package com.yuanwang.adapter;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.yuanwang.test33.R;
import java.util.List;
import java.util.Map;
/**
* Created by qin on 2015/12/14.
*/
public class myAdapter extends BaseAdapter {
private List<Map<String, Object>> list;
private Context context;
private LayoutInflater inflater;
public myAdapter(Context context, List<Map<String, Object>> list) {
super();
this.list = list;
this.context = context;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHodler hodler;
if (convertView == null) {
convertView = inflater.inflate(R.layout.listview_item, null, false);
hodler=new ViewHodler();
hodler.imageViewHeader = (ImageView) convertView.findViewById(R.id.imageViewHeader);
hodler.textViewContent = (TextView) convertView.findViewById(R.id.textViewContent);
hodler.textViewTime = (TextView) convertView.findViewById(R.id.textViewTime);
convertView.setTag(hodler);
} else {
hodler = (ViewHodler) convertView.getTag();
}
Map map = list.get(position);
hodler.imageViewHeader.setImageResource((Integer) map.get("imageViewHeader"));
hodler.textViewContent.setText((String) map.get("textViewContent"));
hodler.textViewTime.setText((String) map.get("textViewTime"));
hodler.imageViewHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(context,B.class);
context.startActivity(intent);
}
});
return convertView;
}
static class ViewHodler {
ImageView imageViewHeader;
TextView textViewContent;
TextView textViewTime;
}
}