Android 文本视图在列表视图中单击

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

我在一个列表视图中有一个文本视图,单击它应该执行一些活动。目前,我正在自定义适配器类的getView方法中编写textview的onClick。单击textview,我将触发活动类中的一个方法。但该活动的变量值为NULL,即使它已在活动的onCreate中初始化。这是我的密码:

适配器类:

@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有自己的生命周期。只需将引用传递给构造函数中的适配器。您能给出一个示例吗?