Ответ 1
Используйте это:
String selectedFromList = (lv.getItemAtPosition(position));
Надеюсь, это поможет.:)
У меня есть список с некоторыми элементами. Я хотел бы получить текст из выбранного элемента.
Вот мой адаптер списка и 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);
}});
Используйте это:
String selectedFromList = (lv.getItemAtPosition(position));
Надеюсь, это поможет.:)
Для этого вам нужно написать следующее:
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);
}});
Другие ответы выглядят хорошо, но я подумал I'd wrap everything
в один полный ответ.
Для достижения этого есть multiple ways
, и это также зависит от того, получаете ли вы текст из simple listView
или из Custom ListView(with custom_list_item.xml).
Для простого 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
}});
Для Custom ListView
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
строка Литье отсутствует.
@Rishi
не дает подробностей об использовании R.id.list_content
Здравствуйте, я использую 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 внутри настраиваемого Row
PS: Это мой первый пост, надеюсь, это поможет; -)
Здесь для будущих ссылок для тех, кто наткнулся на это.
В моем случае у меня был пользовательский класс адаптера с типом как класс 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);
}
}
Надеюсь, это когда-нибудь сэкономит, потому что все решения здесь не работают для меня. Ура!
Это будет определенно работает! Надеюсь, вы удовлетворены!
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();
}
});
Если вы используете List для заполнения ListView в вашем методе onItemClick().
String s = list.get(position);
Вам нужно иметь доступ к этому списку внутри внутреннего класса
попробуйте сделать это, вставьте его в 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);
public void onItemClick(**AdapterView**<?> parent, View view,
int position, long id) {
}
См. AdapterView
.....--- → > класс
Только нужно сделать это:
TextView selectedText=(TextView) parent.findViewById(R.id.textView2);
Смотрите... вы напрямую получаете TextView
Попробуйте этот код:
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();
}
});
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av,
View view, int position, long l) {
String text = String.valueOf(myListView.getItemAtPosition(position));
}
}
});
Это так просто
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView text1 = (TextView) findViewById(R.id.Text1);
TextView text2 = (TextView) findViewById(R.id.Text2);
String txt_1 = ""+text1.getText().toString().trim();
String txt_2 = ""+text2.getText().toString().trim();
//Other_Related_Work
}
});