简体   繁体   English

从Android中的ListView适配器获取TextView

[英]Getting the TextView from the adapter of listview in android

What I have: I have text View in every row of a list view 我所拥有的:我在列表视图的每一行中都有文本视图

What I am trying to do: 我正在尝试做的是:

  • On click of the text view in a list i want to get the name of the setted value of that particular row 在列表中单击文本视图时,我想获取该特定行的设置值的名称
  • I want to detect the click event from the class itself and not the adapter 我想从类本身而不是适配器中检测click事件

CODE:: 码::

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listviewdemo);

        final ListView listviewone = (ListView) findViewById(R.id.listviewone);
        listviewone.setAdapter(mAdapterOne);

        listviewone.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                Log.d("", "");                  

            }
        });
    }

XML-of adapter XML-of适配器

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#fff"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textColor="#000" />

    <ImageView
        android:id="@+id/image"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:scaleType="centerCrop"
        android:padding="5dp"
        android:src="@drawable/img" />

     <ImageView
        android:id="@+id/imageLine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/line" />



</LinearLayout>

视图是列表项,因此您可以执行

String str =(String) ((TextView) view.findViewById(R.id.txt)).getText();
((TextView) view.findViewById(R.id.title).getText().toString()

但是,我建议您从适配器本身获取文本,因为适配器将用于填充ListView。

If you want the value set on textview then try it this way.. 如果要在textview上设置值,请尝试这种方式。

 listviewone.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

               TextView mText  = (TextView) view
                    .findViewById(R.id.title);      

               String value= mText.getText().ToString().trim();            

            }
        });

Get name at particular list item from ListView data holder : 从ListView数据持有者获取特定列表项的名称:

Example : 范例:

ArrayList<HashMap<String,String>> listData= new ArrayList<HashMap<String, String>>();
HashMap<String,String> row1=  new HashMap<String, String>();
row1.put("name","AAA");
listData.add(row1);

listviewone.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
          Log.d("Name :", listData.get(position).get("name"));                  
     }
});

Note : listData use for ListView data holder which is pass adapter to build ListView item. 注意: listData用于ListView数据持有者,它是通过适配器构建ListView项的。

try like this, 这样尝试

 private String getName(int pos){
                View view = listviewone.getAdapter().getView(pos, null, listviewone);
                TextView name = (TextView) view.findViewById(R.id.title);

                return name.getText().ToString();
    }

    listviewone.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {

                    Log.d("NAME", getName(position));                  

                }
            });

hope it will help you 希望对你有帮助

Use a interface for click event on that TextView 使用interface在该TextView单击事件

Code snippet 程式码片段

interface to handle click event 处理点击事件的界面

public interface ListItemBtnClickInterface {

    public void listItemBtnClickListener(Object obj, int viewId, String value);
}

I'm using ArrayAdapter 我正在使用ArrayAdapter

code for Constructor of Adapter 适配器 构造函数的代码

public AddExpTypeAdapter(Context context, int resource,
        List<ExpenseTypeInfo> objects, ListItemBtnClickInterface _interface) {
    super(context, resource, objects);
    // TODO Auto-generated constructor stub
    _context = context;
    layoutId = resource;
    dataList = objects;
    this._interface = _interface;
    notifyDataSetChanged();
}

code for TextView's click in Adapter after initialization and setting Text 初始化和设置文本后, TextView适配器中 单击的代码

vieweHolder.urView.setTag(position);
vieweHolder.urView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Object data = v.getTag();
            if(data != null) {
                String value = vieweHolder.urView.getText().toString();
                _interface.listItemBtnClickListener(data, v.getId(), value);
            }
        }
    });

code for Setting up adapter of ListView in Activity Activity 设置 ListView 适配器的代码

addExpTypeAdapter = new AddExpTypeAdapter(AddExpTypeActivity.this, 
            R.layout.row_add_type, expTypeList, new ListItemBtnClickInterface() {

                private int clickedPosition;

                @Override
                public void listItemBtnClickListener(Object obj, int viewId, String value) {
                        // TODO Auto-generated method stub
                        clickedPosition = Integer.parseInt(obj.toString());

                        switch (viewId) {
                        case R.id.urView:
                            Log.d("Clicked TextView's Value ===> " , value);
                            break;

                        default:
                            break;
                        }
                    }
                });
        typeListView.setAdapter(addExpTypeAdapter);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM