簡體   English   中英

在android中的自定義列表視圖中為文本視圖編寫單擊事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM