更改 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);
希望对你有帮助
我有一个播放列表,我在其中将当前播放的歌曲设置为选中、选中并为背景选择器提供焦点,并将当前歌曲显示在列表顶部。
现在我还想在选中此项时显示一个隐藏的 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);
希望对你有帮助