views:

3377

answers:

5

Hello guys

I coded an own Adapter and added it to my ListActivity via an ListView. The reason why I wrote an own Adapter is, that i had to make some layout changes to the list-entrys. In every entry of the list i've got 3 TextViews.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip">
<TextView
    android:id="@+id/myNr"
    android:layout_width="40dip"
    android:layout_height="fill_parent"
    android:layout_marginRight="15dip"
    android:text="id" 
    android:textSize="25dip"
    android:background="#333333"
    android:gravity="center_horizontal"/>
<LinearLayout
    android:orientation="vertical"
    android:layout_width="0dip"
    android:layout_weight="1"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/editor"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:text="Editor: " />
    <TextView
        android:id="@+id/date"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1" 
        android:singleLine="true"
        android:ellipsize="marquee"
        android:text="Date: " />
</LinearLayout>

The next thing i did, was to implement a "onListItemClick-Methode". Afterwards i implemented a onListItemLongClick - Listener with the following code:

in onCreate of the Activity i added:

 registerForContextMenu(getListView());

then i added the following methode:

Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){
         AdapterView.AdapterContextMenuInfo info;
         info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            long id = getListAdapter().getItemId(info.position);
        }

where "id" is the index of the item in the list. I now want to get the Text of the texview with the id="myNr of this ListItem. Is there any way get this Text?

Tahnks for your help Ripei

A: 

view is the list item, so you can do

String s = ((TextView) view.findViewById(R.id.myNr)).getText();
David Hedlund
A: 

Yes i also thought so. But when i implement this i just get the Text of the first TextView in the List. That means I am able to get the text of the desired TextView but it is always the text of the first list-entry. Isn't there an option to adress the longClickedList-entry?

Ripei
A: 

If you're looking for the TextView at the position of the item the person long-pressed, you can get it out using something like this:

String s = ((TextView) view.getItemAtPosition(info.position)).getText();
Klondike
A: 

thanks for your help but I am afraid it still doesnt work. if i add the line you suggested, it underlines "getItemAtPosition" and says: --The method getItemAtPosition(int) is undefined for the type View--

He suggests to cast the view to a AdapterView, so it looks the following:

String s = ((TextView) ((AdapterView<ListAdapter>) view).getItemAtPosition(info.position)).getText();

When i run this and make a long click on the item, i recieve an "ClassCastException"

Ripei
+1  A: 

Hey Guys I found another way to set an ItemLongClickListener. Therefore i also found a way to get the Text i am displaying.

ListView lv = getListView();
lv.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int row, long arg3) {
   String[] tmp = (String[]) arg0.getItemAtPosition(row);
   //tmp[0] ist the Text of the first TextView displayed by the  clicked ListItem 
   return true;
   }});
Ripei