2014-09-10 3 views
0

Редактировать: Это для C#, а не для Java.Выбор textivew по ID на основе позиции объекта списка

Я чувствую, что это не должно быть так сложно, как это, но я боролся с часами за это, надеясь, что кто-то поможет мне понять это.

В основном у меня есть список, каждая строка которого заполняется 5 текстовыми полями.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:id="@+id/id" 
     android:layout_height="wrap_content" 
     android:layout_width="0px" 
     android:layout_weight="1" 
     android:text="id"/> 
    <TextView 
     android:id="@+id/Name" 
     android:layout_height="wrap_content" 
     android:layout_width="0px" 
     android:layout_weight="1" 
     android:text="Name" /> 
    <TextView 
    android:id="@+id/Status" 
    android:layout_height="wrap_content" 
    android:layout_width="0px" 
    android:layout_weight="1" 
    android:text="Status" /> 
    <TextView 
    android:id="@+id/Lat" 
    android:layout_height="wrap_content" 
    android:layout_width="0px" 
    android:layout_weight="1" 
    android:text="Lat"/> 
    <TextView 
    android:id="@+id/Long" 
    android:layout_height="wrap_content" 
    android:layout_width="0px" 
    android:layout_weight="1" 
    android:text="Long"/> 
</LinearLayout> 

Так что я хочу, когда кто-то нажимает на строку, я могу получить текст из любого из детей TextViews в пределах этой конкретной строки.

Так что я смог получить позицию в ListView с помощью e.Position или объекта с помощью:

ListView listView = FindViewById<ListView>(Resource.Id.LocationsList); 
    var item = listView.GetChildAt(e.Position); 

Но как я могу затем получить 5 TextViews внутри этого объекта?

Спасибо за тонну за любую помощь!

+0

Что такое 'e' в' e.Position'? Вы используете 'ExpandableListview'? –

ответ

1

Вот C# версии

listView.ItemClick += (object sender, AdapterView.ItemClickEventArgs e) => { 
    var textView1 = e.View.FindViewById(Resource.Id.textview1); 
    var textView2 = e.View.FindViewById(Resource.Id.textview2); 
}; 

или если у вас есть позиция уже вы можете использовать

ListView listView = FindViewById<ListView>(Resource.Id.LocationsList); 
var item = listView.GetChildAt(e.Position); 
var textView1 = item.FindViewById(Resource.Id.textview1); 
+0

Отлично, ты лучший, большое спасибо! – user2463732

+0

@ user2463732, если это правильный ответ, отметьте его как ответ, выбрав галочки, чтобы другие могли видеть его как правильно. – kevskree

0

Правильный способ сделать это было бы с помощью OnItemClickListener:

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     TextView nameView = (TextView) view.findViewById(R.id.Name); 
     } 
    }); 
+0

Я ищу решение C#, извините, я должен был добавить его к описанию, упомянутому только в тегах. – user2463732

0

ListView OnItemClickListener

ListView listView = (ListView)findViewById(R.id.LocationsList); 
lv.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View ItemView,int position, long arg3) 
    { 
     // ItemView is the view of the list item that was clicked 
     // since u said there will be 5 text views i.e. fixed number of text views below code seemb to be reasonable. 
     // if the number of text is varying then better approach would be to get all the child nodes and proceed 
     TextView txt1 = (TextView)findViewById(R.id.TextView1); 
     ... 
     ... 
     TextView txt5 = (TextView)findViewById(R.id.TextView5); 
    } 
}); 
+0

Я ищу решение C#, извините, я должен был добавить его к описанию, упомянутому только в тегах. – user2463732

+0

Я понял, что это C#, но я думал, что onItemClickListener будет там даже в случае версии C# IDE. – harshal

Смежные вопросы