私は、カスタムListView
と3 TextView
とカスタムBaseAdapter
とView.OnClickListener
を実装しています。Cutom ListViewとカスタムBaseAdapter onClick(View)メソッドでTextViewテキストを取得する方法
の方法でクリックされた特定のTextView
のテキストを取得する方法をいくつか試しましたが、短いと出てきました。
もし私がonClick(View)
メソッドのパラメータとして得たのは、クリックされた具体的なTextView
です。どうして私はそれを正しく取得できませんか?
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();
}
}
(onClick(View)
の最初のToast
は私に「YouTubeのリンク」String
を与え、第二は、私にListView
の行の1からテキストを与えることに注意してください私のLIsView
をブラウズするまで、同じテキストを毎回私に渡します。最初のブラウジングの後、Toast
は同じままで、2番目の行は私に別の行のテキストを与えますTextView
)。
EDIT:
list_view_row_item.xml:あなたのBaseAdapter内のonClickを実装
<?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>
を行うための最も簡単な方法です? – AndroidEnthusiast
@AndroidEnthusiastこれは、この方法でよりクリーンなコードです。 – God
さて、あなたの "R.layout.list_view_row" xmlが – AndroidEnthusiast