[英]Writing Click Event for a textview within a custom listview in android
我正在開發一個項目,其中有一個自定義列表視圖,每行有四個 TextView。當我點擊一個文本視圖時,我希望文本視圖的顏色發生變化。我嘗試執行下面顯示的代碼:
screenlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final TextView slot1 = (TextView) view.findViewById(R.id.slot1);;
slot1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
slot1.setTextColor(Color.RED);
}
});
}
});
問題是需要單擊兩次才能設置顏色。如何確保在第一次單擊時更改顏色?。
編輯:我在下面添加了適配器代碼:
public class ScreenListAdapter extends BaseAdapter {
List<ScreensDataModel> list_screeen;
Context con;
LayoutInflater inflater;
ViewHolder vh;
ImageLoader imageLoader;
List<SlotsDataModel> slot_list;
public ScreenListAdapter(List<ScreensDataModel> list_screeen, Context con) {
this.con=con;
this. list_screeen= list_screeen;
inflater=(LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = AppController.getInstance().getImageLoader();
}
@Override
public int getCount() {
return list_screeen.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView=inflater.inflate(R.layout.screens_view_style, null);
vh=new ViewHolder();
vh.screenname= (TextView) convertView.findViewById(R.id.screenname);
vh.moviename= (TextView) convertView.findViewById(R.id.moviename);
vh.slots= (ViewGroup) convertView.findViewById(R.id.slotview);
vh.slot1= (TextView) vh.slots.findViewById(R.id.slot1);
vh.slot2= (TextView) vh.slots.findViewById(R.id.slot2);
vh.slot3= (TextView) vh.slots.findViewById(R.id.slot3);
vh.slot4= (TextView) vh.slots.findViewById(R.id.slot4);
convertView.setTag(vh);
}
else
{
vh=(ViewHolder) convertView.getTag();
}
vh.screenname.setText(list_screeen.get(position).getScreenname());
vh.moviename.setText(list_screeen.get(position).getMoviename());
slot_list=list_screeen.get(position).list_slots;
int i=slot_list.size();
if(i==4)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
vh.slot3.setText(slot_list.get(2).getTime()+"\n"+slot_list.get(2).getPrice());
vh.slot4.setText(slot_list.get(3).getTime()+"\n"+slot_list.get(3).getPrice());
}
else if(i==3)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
vh.slot3.setText(slot_list.get(2).getTime()+"\n"+slot_list.get(2).getPrice());
}
else if(i==2)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
}
else if(i==1)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
}
vh.slot1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vh.slot1.setBackgroundColor(Color.RED);
}
});
convertView.setBackgroundColor(Color.parseColor("#2B030303"));
return convertView;
}
public class ViewHolder
{
TextView screenname;
TextView moviename;
ListView slotlist;
ViewGroup slots;
TextView slot1;
TextView slot2;
TextView slot3;
TextView slot4;
}
}
在getView()
內的適配器中實現TextView.setOnClickListener()
getView()
。 您將擁有列表項的位置,通過該位置您可以識別單擊了哪個項目。 知道了?
vh.slot1.setOnclickListener...
specClickListener spcl=new specClickListener();
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView=inflater.inflate(R.layout.screens_view_style, null);
vh=new ViewHolder();
vh.screenname= (TextView) convertView.findViewById(R.id.screenname);
vh.moviename= (TextView) convertView.findViewById(R.id.moviename);
vh.slots= (ViewGroup) convertView.findViewById(R.id.slotview);
vh.slot1= (TextView) vh.slots.findViewById(R.id.slot1);
vh.slot2= (TextView) vh.slots.findViewById(R.id.slot2);
vh.slot3= (TextView) vh.slots.findViewById(R.id.slot3);
vh.slot4= (TextView) vh.slots.findViewById(R.id.slot4);
vh.slot1.setOnClickListener(spcl);
vh.slot2.setOnClickListener(spcl);
vh.slot3.setOnClickListener(spcl);
vh.slot4.setOnClickListener(spcl);
convertView.setTag(vh);
}
else
{
vh=(ViewHolder) convertView.getTag();
}
vh.screenname.setText(list_screeen.get(position).getScreenname());
vh.moviename.setText(list_screeen.get(position).getMoviename());
slot_list=list_screeen.get(position).list_slots;
int i=slot_list.size();
if(i==4)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
vh.slot3.setText(slot_list.get(2).getTime()+"\n"+slot_list.get(2).getPrice());
vh.slot4.setText(slot_list.get(3).getTime()+"\n"+slot_list.get(3).getPrice());
}
else if(i==3)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
vh.slot3.setText(slot_list.get(2).getTime()+"\n"+slot_list.get(2).getPrice());
}
else if(i==2)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
vh.slot2.setText(slot_list.get(1).getTime()+"\n"+slot_list.get(1).getPrice());
}
else if(i==1)
{
vh.slot1.setText(slot_list.get(0).getTime()+"\n"+slot_list.get(0).getPrice());
}
public class specClickListener implements View.OnClickListener {
public specClickListener (...) {
}
@Override public void onClick(View v) {
v.setbackgrouncolor(Color.Red);
}
}
convertView.setBackgroundColor(Color.parseColor("#2B030303"));
return convertView;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.