列表视图:获取所选行的文本

时间:2013-08-21 11:14:41

标签: android android-listview android-adapter android-lazyadapter

我有一张listview,每张图片都有textview。 我希望在点击整行时获得文本的值。 下面的代码表现得很奇怪。我得到的是随机行的值,而不是单击的行。

我没有弄错。 任何帮助将不胜感激。

我这样做,:

public static class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    public ImageLoader imageLoader; 

    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader=new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
            vi = inflater.inflate(R.layout.list_row, null);

        title = (TextView)vi.findViewById(R.id.title); // title
        ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image

        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);

        // Setting all values in listview
        title.setText(song.get(Meida_listActivity.KEY_TITLE));
        imageLoader.DisplayImage(song.get(Meida_listActivity.KEY_THUMB_URL), thumb_image);


        vi.setOnClickListener( new View.OnClickListener()
        {


            public void onClick(View v)
            {
                  String listValue = (String) title.getText();
                  System.out.println("this is value of string ::: :::: " + listValue);

            }


        });
        return vi;
    }
}

6 个答案:

答案 0 :(得分:10)

你也可以尝试实现点击列表视图并获得这样的文字!希望它有效..

listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            TextView text = (TextView) view.findViewById(R.id.title);
            String lst_txt = text.getText().toString().trim();
            System.out.println("this is value of string ::: :::: " + lst_txt);
        }
    });

答案 1 :(得分:1)

OnClickListener将代码更改为:

  vi.setOnClickListener( new View.OnClickListener()
    {


        public void onClick(View v)
        {
              String listValue = (String) data.get(position).get(Meida_listActivity.KEY_TITLE);
              System.out.println("this is value of string ::: :::: " + listValue);

        }


    });

这样你就可以确保引用正确的行。

答案 2 :(得分:1)

可变数据的类型数据是ArrayList

    HashMap<String, String> _hashMap = (HashMap<String, String>) data.get(position);
    String _test = _hashMap.get("Text").toString();

答案 3 :(得分:0)

 vi.setOnClickListener( new View.OnClickListener()
    {
   public void onClick(View v)
        {
     title = (TextView)v.findViewById(R.id.title);
              String listValue = title.getText().toString();
              System.out.println("this is value of string ::: :::: " + listValue);

        }


    });
    return vi;

答案 4 :(得分:0)

添加以下行listView.setOnItemClickListener(this);

和覆盖onItemClick方法。根据位置(第三个参数)回溯对象。

答案 5 :(得分:0)

将此侦听器用于Activity oncreate方法

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {     

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


    // Perform Action here..... 
String value = av.getItemAtPosition(index).toString();
    }

  });