How can I changing TextView background color on click in the ListView?

91 views Asked by At

I want to change the background of a textview when click every items. I do not have TextView on the XML file. I added text by array adapter. I have search the internet for solutions and look at most of all the solution on stackoverflow, still no solution.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_genel);



    final VideoView videoview = findViewById(R.id.Videogenel);
    listView = (ListView) findViewById(R.id.lgvideo);
    videoList= new ArrayList<>();
    videoList.add("1: Genel Bilgiler");



    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,videoList);
    listView.setAdapter(adapter);




    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            switch (position){
                case 0:
                    videoview.setVideoPath("/storage/A6D3-E544/videos/genel1.mp4");
                    break;
            }
            final MediaController mediacontroller = new MediaController(Genel.this);
            mediacontroller.setAnchorView(videoview);

            videoview.setMediaController(mediacontroller);
            videoview.requestFocus();
            videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                        @Override
                        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                            videoview.setMediaController(mediacontroller);
                            mediacontroller.setAnchorView(videoview);
                        }
                    });
                }
            });

            videoview.setOnErrorListener(new MediaPlayer.OnErrorListener() {
                @Override
                public boolean onError(MediaPlayer mp, int what, int extra) {
                    Log.d("API123", "What " + what + " extra " + extra);
                    return false;
                }
            });

            videoview.setMediaController(mediaController);
            videoview.start();

        }
     });

   }
3

There are 3 answers

2
aliraza12636 On

Try by adding an onItemClickListner on the listview and if it does not work then I don't think this is possible with the default ArrayAdapter class. so create your own adapter class and extend it with the BaseAdapter or ArrayAdapter you can search for examples. then you can change Item's background by adding an onItemClickListner on your ListView.

1
Panicum On

I think that you should make your own CustomAdapter and then you can set onClickListener for your TextView inside this adapter or onItemClickListner for your listView, like here.

4
Jinn On

Try this: Create a selector color file res/color/selector_txt.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:color="@color/color1"/>
    <item android:state_pressed="true" android:state_enabled="false" android:color="@color/color2" />
    <item android:state_enabled="false" android:color="@color/color3" />
    <item android:color="@color/color4"/>
 </selector>

Create new layout file: list_item.xml.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:background="@color/selector_txt"
android:textSize="15sp"
/>

Then replace the layout of array adapter.

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.list_item,videoList);