从适配器类启动FragmentActivity

时间:2014-08-09 11:49:13

标签: android android-intent onclicklistener android-fragmentactivity

我的代码中有一个包含listview的活动,我通过适配器类控制这个listview。每个listview都有一个TextView,我想通过单击每个项目(TextView)来启动FragmentActivity。这是我的适配器类的代码......

class TrackAdapter extends SimpleAdapter {

Context context;
public TrackAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
    super(context, data, resource, from, to);
}



@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
    final TrackAdapter proxy = this;
    final View trackView = super.getView(position, convertView, parent);

    final TextView name = (TextView) trackView.findViewById(R.id.name);

            Intent intent = new Intent(context ,Poet.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    });




    return trackView;
}

}

诗人类扩展了FragmentActivity并实现了ActioBar.TabListener:

public class Poet extends FragmentActivity implements
    ActionBar.TabListener {

private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;


@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.poet);
}

通过检查logCat中的日志,我意识到问题出在这个部分..

           Intent intent = new Intent(context ,Poet.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);

通过单击每个TextView,我得到一个&#34;强制关闭&#34;。请帮我解决这个问题!

2 个答案:

答案 0 :(得分:1)

试试这个..

上下文为空,您应该初始化上下文,例如this.context = context;

Context context;
public TrackAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
    super(context, data, resource, from, to);
    this.context = context;
}

答案 1 :(得分:1)

您必须为文本视图设置OnClickListener。 添加以下行:

name .setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context ,Poet.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
            }
        });
在找到textview之后和开始新活动之前,在代码之间

final TextView name = (TextView) trackView.findViewById(R.id.name);

        Intent intent = new Intent(context ,Poet.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
});

并且在您的构造函数中,您必须拥有此代码(您的上下文为null):

this.context = context

如果您的问题没有解决,请发布您的日志。