Android 文本视图在列表视图中单击
我在一个列表视图中有一个文本视图,单击它应该执行一些活动。目前,我正在自定义适配器类的getView方法中编写textview的onClick。单击textview,我将触发活动类中的一个方法。但该活动的变量值为NULL,即使它已在活动的onCreate中初始化。这是我的密码: 适配器类:Android 文本视图在列表视图中单击,android,listview,textview,Android,Listview,Textview,我在一个列表视图中有一个文本视图,单击它应该执行一些活动。目前,我正在自定义适配器类的getView方法中编写textview的onClick。单击textview,我将触发活动类中的一个方法。但该活动的变量值为NULL,即使它已在活动的onCreate中初始化。这是我的密码: 适配器类: @Override public View getView(int position, View convertView, ViewGroup parent) { final int pos = p
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
Item item = (Item) getItem(position);
TextView textView = (TextView) view
.findViewById(R.id.tv_song_title);
textView.setText(item.text);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity main = new MainActivity();
main.songPicked(pos); //calling act class method
}
});
活动类别:
private MusicService musicSrv;
public void songPicked(int position) { //method called
if (musicSrv!=null) //is null .Why??
{
musicSrv.setSong(position);
songName = musicSrv.playSong();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
songAdt = new SongAdapter();
songAdt.setRows(rows);
songView.setAdapter(songAdt);
playMusic();
}
public void playMusic() {
if (playIntent == null) {
playIntent = new Intent(this, MusicService.class);
startService(playIntent);
bindService(playIntent, musicConnection, Context.BIND_AUTO_CREATE);
}
}
// connect to the service
private ServiceConnection musicConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MusicBinder binder = (MusicBinder) service;
// get service
musicSrv = binder.getService();
// pass list
musicSrv.setList(songList);
musicBound = true;
Log.i("LEAKTEST", "Connected to instance " + this.toString());
}
@Override
public void onServiceDisconnected(ComponentName name) {
musicBound = false;
musicSrv = null;
}
使用而不是传递整个活动
主要思想是
public interface SmthListener() {
void onSmthHappens(smthParams);
}
public class WhoNotify {
SmthListener mListener;
public WhoNotify(SmthListener listener) {
mListener = listener;
}
public void smthHappensInMyClass() {
mListener.onSmthHappens(smthParams);
}
}
public class WhoListene implements SmthListener {
@Override
public void onCreate(...) {
... new WhoNotify(this);
}
@Override
void onSmthHappens(smthParams) {
// do stuff;
}
}
如果MainActivity是活动类。您拥有的MainActivity main=新的MainActivity;如何从适配器类访问Activity类中的方法?请更改适配器的构造函数以传递对Activity的引用。您不能初始化扩展Activity的类,因为Activity有自己的生命周期。只需将引用传递给构造函数中的适配器。您能给出一个示例吗?