更改 ListView 中所选项目的 TextView 的可见性

Change visibility of TextView for selected item in ListView

我有一个播放列表,我在其中将当前播放的歌曲设置为选中、选中并为背景选择器提供焦点,并将当前歌曲显示在列表顶部。

现在我还想在选中此项时显示一个隐藏的 TextView,但不知何故我失败了。 我敢打赌这很容易,但也许今天不是我的一天 ;-)

public static void changeUI() {
    position = PlayerConstants.SONG_NUMBER;

    mediaListView.setItemChecked(position, true);
    mediaListView.setSelection(position);

    mediaListView.getChildAt(position).setVisibility(nowPlaying.VISIBLE);

    View v = mediaListView.getChildAt(position);
    if (v != null) {
        v.requestFocus();
    }
}

我尝试获取选定的子项并将 TextView "nowPlaying" 设置为 VISIBLE,但没有任何反应。

* 更新,post 根据要求完成代码 *

public class PlayList{

CustomAdapter customAdapter = null;
static TextView playingSong, nowPlaying;
static ListView mediaListView;
public static String getMode;
static Context context;
private static int position;
private static boolean playlistVisible;

private static final String STATE_SELECTED_SORTING_ITEM = "selected_sorting_item";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.player_activity_playlist);
    context = PlayList.this;

    init();
}

private void init() {
    getViews();
    setListeners();

    if (PlayerConstants.SONGS_LIST.size() <= 0) {
        PlayerConstants.SONGS_LIST = UtilFunctions
                .listOfSongs(getApplicationContext());
    }
    setListItems();
}

private void setListItems() {
    customAdapter = new CustomAdapter(this, R.layout.player_activity_playlist_listitem_song,
            PlayerConstants.SONGS_LIST);
    mediaListView.setAdapter(customAdapter);
    mediaListView.setFastScrollEnabled(true);
}

private void getViews() {
    mediaListView = (ListView) findViewById(R.id.listViewMusic);
    nowPlaying = (TextView) findViewById(R.id.nowPlaying);
}

private void setListeners() {
    mediaListView
    .setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View item,
                int position, long id) {
            Log.d("TAG", "TAG Tapped INOUT(IN)");
            PlayerConstants.SONG_PAUSED = false;
            PlayerConstants.SONG_NUMBER = position;
            boolean isServiceRunning = UtilFunctions
                    .isServiceRunning(SongService.class.getName(),
                            getApplicationContext());
            if (!isServiceRunning) {
                Intent i = new Intent(getApplicationContext(),
                        SongService.class);
                startService(i);
            } else {
                PlayerConstants.SONG_CHANGE_HANDLER
                .sendMessage(PlayerConstants.SONG_CHANGE_HANDLER
                        .obtainMessage());
            }

            // Return to calling activity
            Intent in = new Intent(getApplicationContext(),
                    AudioPlayer.class);
            setResult(100, in);
            // Closing PlayListView
            finish();
        }
    });

}

public static void changeUI() {
    position = PlayerConstants.SONG_NUMBER;

    mediaListView.setItemChecked(position, true);
    mediaListView.setSelection(position);

    mediaListView.getChildAt(position).setVisibility(nowPlaying.VISIBLE);

    View v = mediaListView.getChildAt(position);
    if (v != null) {
        v.requestFocus();
    }
}

}

要实现这一点: 1. listview 的 setOnItemClickListener 1.通过适配器的对象传递适配器中的位置值(可以在适配器中创建方法class) 2.调用notifyDatasetchange(); 3. 在 getView 中创建一个 if else

if(selectedPosition == position(getview position) )
 textview.setVisibility(View.INVISIBLE);
else
textview.setVisibility(View.VISIBLE);

希望对你有帮助