Ich habe eine benutzerdefinierte ListView
mit 3 TextView
s und eine benutzerdefinierte BaseAdapter
, die View.OnClickListener
implementiert.Wie TextView Text in einem Cutom ListView und einem benutzerdefinierten BaseAdapter onClick (View) -Methode
Ich versuchte einige Möglichkeiten, den Text von der spezifischen TextView
, die in der onClick(View)
Methode angeklickt wurde, aber kam kurz.
Wenn die View
ich bekomme als Parameter der onClick(View)
Methode ist die spezifische TextView
, die angeklickt wurde, Warum kann ich es nicht richtig Text bekommen?
MyBaseAdapter.java:
public class MyListViewAdapter extends BaseAdapter implements View.OnClickListener
{
private Context context;
private ArrayList<MyListViewRow> rowsList = new ArrayList<MyListViewRow>(); // All one row items
private TextView songYouTubeLink;
private TextView b;
private TextView c;
public MyListViewAdapter(Context context,ArrayList<MyListViewRow> rowsList)
{
this.context = context;
this.rowsList = rowsList;
}
@Override
public int getCount()
{
return this.rowsList.size();
}
@Override
public Object getItem(int position)
{
return this.rowsList.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
/**
* Returns a new row to display in the list view.
*
* Position - position of the current row.
*
*/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
/**
* Inflating the root view and all his children and set them to a View Object.
*
*/
View row = layoutInflater.inflate(R.layout.list_view_row,null);
// Get all the views in my row
this.songYouTubeLink= (TextView) row.findViewById(R.id.songYouTubeLink_id);
this.b = (TextView) row.findViewById(R.id.b_id);
this.c = (TextView) row.findViewById(R.id.c_id);
MyListViewRow myListViewRow = rowsList.get(position);
// Set values to all the views in my row
this.songYouTubeLink.setText(myListViewRow.getSongYouTubeLinkText());
this.b.setText(myListViewRow.getB());
this.c.setText(myListViewRow.getC());
// Setting on click listeners
this.songYouTubeLink.setOnClickListener(this);
//this.b.setOnClickListener(this);
return row;
}
@Override
public void onClick(View v)
{
Toast.makeText(context, "onClick LV Adapter called", Toast.LENGTH_SHORT).show();
TextView tv = (TextView) v;
Toast.makeText(context, tv.getText().toString(), Toast.LENGTH_SHORT).show();
Toast.makeText(context, this.a.getText().toString(), Toast.LENGTH_SHORT).show();
}
}
Die erste Toast
in onClick(View)
gibt mir "YouTube-Link" String
und die zweite gibt mir einen Text aus dem 1 der Reihen des ListView
(Beachten Sie, dass die zweite Toast
gib mir immer den gleichen Text, bis ich meine LIsView
durchsuchen. Nach dem Surfen bleibt die erste Toast
gleich und die zweite gibt mir einen Text von einer anderen Zeile TextView
).
EDIT:
list_view_row_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Artist name and song name -->
<TextView
android:id="@+id/artist_song_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_marginBottom="3dp"
/>
<!-- Song youtube link -->
<TextView
android:id="@+id/youtube_link_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_below="@id/artist_song_tv_id"
android:layout_marginBottom="3dp"
/>
<!-- Song shazam link -->
<TextView
android:id="@+id/shazam_link_tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_below="@id/artist_song_tv_id"
android:layout_toRightOf="@id/youtube_link_tv_id"
android:layout_marginBottom="5dp"
/>
</RelativeLayout>
Warum nicht einfach einen Onclick Zuhörer für die aktuelle Ansicht anstelle des Basis Adapterset Umsetzung Onclick ? – AndroidEnthusiast
@AndroidEnthusiast Weil es auf diese Weise einen saubereren Code gibt. – God
Okay ... Bitte laden Sie, was Ihre "R.layout.list_view_row" xml wie – AndroidEnthusiast