ListView高级

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值