在列表行中多次单击

Multiple click in list row

我在 Android 中有一个 ListView。每个列表项都有 2 个文本视图。如果我点击一个 TextView 我想打开一个 Activity 如果我点击另一个我想做另一件事。

我的适配器代码是这样的:

public class LazyAdapterHelpCentersAlava extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    HashMap<String, String> song;
    Typeface tf; 

    Context context;

    public LazyAdapterHelpCentersAlava(Activity a, ArrayList<HashMap<String, String>> d, String font) {
        activity = a;
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        tf = Typeface.createFromAsset(activity.getAssets(), font);
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
        vi = inflater.inflate(R.layout.list_row_help_centers, null);

        //TextView id = (TextView)vi.findViewById(R.id.id); // title
        TextView title = (TextView)vi.findViewById(R.id.nombre); // title
        TextView localizacion = (TextView)vi.findViewById(R.id.localizacion);
        TextView email = (TextView)vi.findViewById(R.id.email);
        TextView web = (TextView)vi.findViewById(R.id.web);

        song = new HashMap<String, String>();
        song = data.get(position);

        // Setting all values in listview
        title.setText(song.get(Help.TAG_NOMBRE));
        web.setText(song.get(Help.TAG_TELEFONO));
        localizacion.setText(song.get(Help.TAG_DIRECCION));
        email.setText(song.get(Help.TAG_EMAIL));

        title.setTypeface(tf);
        web.setTypeface(tf);
        localizacion.setTypeface(tf);
        email.setTypeface(tf);

        web = (TextView)vi.findViewById(R.id.web);
        web.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Need to start an Activity here     
            }
        });

        return vi;
    }
}

我已经在 web 上安装了点击监听器,但是,我不知道如何打开 Activity,因为它说的是这样的错误 方法 startActivity(Intent) 未定义类型 new View.OnClickListener(){}

有人可以帮助我吗?非常感谢。

使用适配器上下文

        public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null){
            context = parent.getContext();
         //other code
        }

然后

        web.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
               Intent redirect = new Intent(context,New.class);
               context.startActivity(redirect);  
                }
           });

试试这个,因为您在构造函数中将上下文作为 Activity a

      web.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
           Intent redirect = new Intent(activity,New.class);
           activity.startActivity(redirect);  
            }
       });

如果您的适配器是 MainActivity 中的嵌套 class,那么您需要执行类似的操作。

web.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent newActivity = new Intent(MainActivity.this, NewActivity.class);
        startActivity(newActivity);  
    }
});

如果您的适配器不是 MainActivity 中的嵌套 class,您需要先将 ActivityContext 传递给 LazyAdapterHelpCentersAlava然后使用 Context 启动 Activity

public class LazyAdapterHelpCentersAlava extends BaseAdapter {

    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater=null;
    HashMap<String, String> song;
    Typeface tf; 

    Context context;

    public LazyAdapterHelpCentersAlava(Context ctx, ArrayList<HashMap<String, String>> d, String font) {
        data=d;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        tf = Typeface.createFromAsset(activity.getAssets(), font);
        context = ctx;   // Initialize the context here. 
    }

    // .. Here are the other functions ... Omitted for clarity

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi=convertView;
        if(convertView==null)
        vi = inflater.inflate(R.layout.list_row_help_centers, null);

        // Here are the other lines in getView function. Omitted for clarity

        web = (TextView)vi.findViewById(R.id.web);
        web.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Need to start an Activity here   
                Intent newActivity = new Intent(context, NewActivity.class);
                context.startActivity(newActivity); 
            }
        });

        return vi;
    }
}

在 oncreate() 方法中添加这一行

this.context=this;

在 web Onclick 方法下添加这一行

Intent i = new Intent(context,NextActivity.class);
context.startActivity(i);

下一个Activity是Activity你要去的地方

使用上下文,

context.startActivity(intent);

在您的 onClick() 方法中,添加:

 Intent startActivity=new Intent("abc.Xyz");
    startActivity(newActivity);

在您的 AndroidManifest.xml 中,添加:

<activity android:name=".Xyz"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="abc.XYZ" />
            <category android:name="android.intent.action.DEFAULT" />
        </intent-filter>
    </activity>

注意:上面代码中Xyz是你要启动的activity的ClassName,abc是Activity 文件所在的 PackageName。