如何从listView上的选定项中提取文本

时间:2012-02-09 10:06:37

标签: android android-layout

我有一些包含一些项目的列表视图。我想从所选项目中获取文本。

这是我的列表适配器和onItemClickListener:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));


    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
??????
    }});
        }

请告诉我如何从所选项目中获取字符串。

方法((TextView)视图).getText()不起作用,我有一个

ClassCastException: android.widget.LinearLayout

我找到了解决方案,也许有人会需要它:

ListView lv = (ListView)findViewById(R.id.listView1);
    lv.setAdapter(new ArrayAdapter<Country>(
            this,R.layout.list_black_text,R.id.list_content, values));

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
            TextView textView = (TextView) view.findViewById(R.id.list_content);
            String text = textView.getText().toString(); 
            System.out.println("Choosen Country = : " + text);

    }});

14 个答案:

答案 0 :(得分:61)

使用此:

String selectedFromList = (lv.getItemAtPosition(position));

希望它会有所帮助。 :)

答案 1 :(得分:14)

为此,您需要编写以下内容:

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        TextView textView = (TextView) view.findViewById(R.id.list_content);
        String text = lv.get(position).toString().trim();
        System.out.println("Chosen Country = : " + text);

}});

答案 2 :(得分:3)

其他答案看起来不错,但我认为I'd wrap everything有一个完整的答案。

multiple ways来实现此目标,这还取决于您是从simple listView还是从Custom ListView(with custom_list_item.xml).

获取文字

对于Simple ListView

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        String text = lv.get(position).tostring().trim();//first method 
        final String text = ((TextView)view).getText();// second method
}});

对于自定义列表视图

lv.setOnItemClickListener(new OnItemClickListener() {

    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
        TextView textView = (TextView) view.findViewById(R.id.list_content);
//where list_content is the id of TextView in listview_item.xml

}});

其他人的问题答案

@Android Killer字符串Casting缺失。

@Rishi未提供有关使用R.id.list_content

的详细信息

答案 3 :(得分:3)

您好我正在使用带注册上下文菜单的CustomListView。在这种情况下,访问自定义列表行中的项目的方式是:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.add:
                TextView textView = (TextView) info.targetView.findViewById(R.id.yourItem);
                String text = textView.getText().toString();
                Toast.makeText(getApplicationContext(), "Selected " + text, Toast.LENGTH_LONG).show(); 
        default:
                return super.onContextItemSelected(item);
    }
}

其中R.id.yourItem是自定义行

中的textView

PS:这是我的第一篇文章,希望它有所帮助; - )

答案 4 :(得分:2)

以下是任何偶然发现此问题的人的参考资料。 在我的情况下,我有一个自定义适配器类,类型为我有的POJO类。此外,我想传递给适配器的项目显示在ListView类的util.List中。

我成功将数据传递给ListView,但也想获取当前所选文本。

例如:我传递的数据是讲师讲授的学校名单,所以他必须选择当时想要合作的特定学校,并登录我想要的将意图传递给讲师所选择的当前学校的新Activity

因此我的ListView onClick()

private void loginSuccess() {
    progressDialog.dismiss();
    if (mySchoolsList.size() > 1) {
        schoolsListView = new ListView(MainActivity.this);
        schoolsArrayAdapter = new SchoolListAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mySchoolsList);
        schoolsListView.setAdapter(schoolsArrayAdapter);

        dialog = new Dialog(MainActivity.this);
        dialog.setContentView(schoolsListView);
        dialog.setTitle("Welcome " + staff.getFullName());
        dialog.show();


        schoolsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //the .getName() is accessed from the School POJO class.
                String schoolName = schoolsArrayAdapter.getItem(position).getName();
                intent = new Intent(MainActivity.this, NavMainActivity.class);
                intent.putExtra("sentIntent", schoolName);
                startActivity(intent);
            }
        });

    } else {
        intent = new Intent(MainActivity.this, NavMainActivity.class);
        intent.putExtra("sentIntent", recieveName);
        startActivity(intent);
    }
}

希望有一天能拯救某人,因为这里的所有解决方案都不适合我。干杯!

答案 5 :(得分:2)

它肯定会有效!希望你满意!

ListView lv=(ListView)findViewById(R.id.listView1);

lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub
        String text = (String) lv.getItemAtPosition(arg2);
        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();

    }
});

答案 6 :(得分:0)

如果您使用List在onItemClick()方法中填充ListView。

String s = list.get(position);

您需要能够在内部类

中访问此列表

答案 7 :(得分:0)

尝试这样做,将其插入onItemClickListener,我不确定你的Country类是什么样的:

String s = values.get(position).getCountryName();
Log.e("LISTVIEW", "selected item text = "+s);

  or

String s = values.get(position).toString();
Log.e("LISTVIEW", "selected item text = "+s);

答案 8 :(得分:0)

public void onItemClick(**AdapterView**<?> parent, View view, 
                                            int position, long id) {

 }

请参阅AdapterView .....---&gt;&gt;&gt;类

只需要这样做:

  TextView selectedText=(TextView) parent.findViewById(R.id.textView2);

请参阅...您直接获得TextView

答案 9 :(得分:0)

尝试以下代码:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         Toast.makeText(getApplicationContext(),(String)parent.getItemAtPosition(position),Toast.LENGTH_SHORT).show();
     }
});

答案 10 :(得分:0)

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> av,
                                View view, int position, long l) {
            String text = String.valueOf(myListView.getItemAtPosition(position));

            }
        }
    });

答案 11 :(得分:0)

就这么简单

enum

答案 12 :(得分:0)

我找到了最简单的方法:

list_content.xml

 <TextView
    <!-- rest of the code -->
    android:id="@+id/content"
    android:onClick="get_content"  <!-- Just add this -->
    />

MainActivity

public void get_content(View view){

    TextView textView = view.findViewById(R.id.content);
    System.out.println("Text is: "+textView.getText().toString());
}

答案 13 :(得分:0)

这对我有用。我在这里尝试了一些解决方案,但没有用。希望这会有所帮助。

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFamily);

    listViewDemo.setAdapter(arrayAdapter);

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

            //String nameSelectedfromList = arrayAdapter.getItem(position).toString();
            String nameSelectedfromList = listViewDemo.getItemAtPosition(position).toString();

            Log.i("Clicked Item", nameSelectedfromList);

        }
    });