Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设置OnClickListener泛型方法_Java_Android_Generics_Onclicklistener - Fatal编程技术网

Java 设置OnClickListener泛型方法

Java 设置OnClickListener泛型方法,java,android,generics,onclicklistener,Java,Android,Generics,Onclicklistener,我有一个活动,它有不同的文本视图。现在,通过单击每个文本视图,它应该会打开另一个活动。我实现了一种通用方法,因为我想删除冗余代码。 所以我只是想问一下您的意见,我是否以正确的方式在java中使用了泛型概念,您是否会使用类似的方法在Android中将侦听器设置为多个视图 (我使用泛型名称进行演示,不想在xml布局上使用onClick声明): public类MainActivity扩展了AppCompatActivity{ @凌驾 创建时受保护的void(Bundle savedInstanceSt

我有一个活动,它有不同的文本视图。现在,通过单击每个文本视图,它应该会打开另一个活动。我实现了一种通用方法,因为我想删除冗余代码。 所以我只是想问一下您的意见,我是否以正确的方式在java中使用了泛型概念,您是否会使用类似的方法在Android中将侦听器设置为多个视图

(我使用泛型名称进行演示,不想在xml布局上使用onClick声明):

public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView activity1=(TextView)findViewById(R.id.activity1);
TextView activity2=(TextView)findViewById(R.id.activity2);
TextView activity3=(TextView)findViewById(R.id.activity3);
TextView activity4=(TextView)findViewById(R.id.activity4);
setOnClickListener(activity1,activity1.class);
setOnClickListener(activity2,activity2.class);
setOnClickListener(activity3,activity3.class);
setOnClickListener(activity4,activity4.class);
}

private void setOnClickListener(TextView TextView,final Class如果这段代码有效,那么这是一个非常好的概念。
我希望这样做

我建议重写View.OnClickListener。将代码与活动分离的另一个好处是将逻辑与活动本身分离,因此您可以在不同的上下文中使用GenericClickListener。 大概是这样的:

public class GenericClickListener implements View.OnClickListener {
    public GenericClickListener(Activity activity, Class<? extends AppCompatActivity> activityClass) {
        @Override
        public void onClick(View v) {
            Intent activityIntent = new Intent(activity, activityClass);
            startActivity(activityIntent);
        }
    } 
}

除此之外,您的实现似乎是一种合理的方法。

我正在为此制定自己的解决方案,在检查现有元素时发现了此线程。下面的代码可以正常工作(@RaceYouAnytime answer几乎没有错误),并允许您使用
活动
片段
实例化
StartActivity
OnClickListener`

public class StartActivityOnClickListener implements View.OnClickListener
{
    private Activity sourceActivity;
    private Class<?> destinationActivityClass;

    /**
     * Constructor to use in Activities
     * */
    public StartActivityOnClickListener(Activity srcActivity, Class<? extends AppCompatActivity> dstActivityClass)
    {
        this.sourceActivity = srcActivity;
        this.destinationActivityClass = dstActivityClass;
    }

    /**
     * Constructor to use in Fragments
     * */
    public StartActivityOnClickListener(Fragment srcFragment, Class<? extends AppCompatActivity> dstActivityClass)
    {
        this.sourceActivity = srcFragment.getActivity();
        this.destinationActivityClass = dstActivityClass;
    }

    /**
     * Overridden onClick() method building the Intent and calling startActivity() with it
     */
    @Override
    public void onClick(View v)
    {
        sourceActivity.startActivity(new Intent(sourceActivity, destinationActivityClass));
    }
}

询问我们对什么的看法?@GlenPierce sry,我刚刚更新了我的问题我将在活动上实现onClick Listener,切换在onClick方法实现中单击的视图,然后执行我想执行的操作need@RaceYourTime它应该是“实现”而不是“扩展”对吗?@NoName123你说得对,我没有测试代码,所以很抱歉出现了这样的小错误。我会编辑答案。
TextView activity1 = (TextView) findViewById(R.id.activity1);
TextView activity2 = (TextView) findViewById(R.id.activity2);
TextView activity3 = (TextView) findViewById(R.id.activity3);
TextView activity4 = (TextView) findViewById(R.id.activity4);

activity1.setOnClickListener(new GenericClickListener(thia, Activity1.class));
activity2.setOnClickListener(new GenericClickListener(this, Activity2.class));
activity3.setOnClickListener(new GenericClickListener(this, Activity3.class));
activity4.setOnClickListener(new GenericClickListener(this, Activity4.class));
public class StartActivityOnClickListener implements View.OnClickListener
{
    private Activity sourceActivity;
    private Class<?> destinationActivityClass;

    /**
     * Constructor to use in Activities
     * */
    public StartActivityOnClickListener(Activity srcActivity, Class<? extends AppCompatActivity> dstActivityClass)
    {
        this.sourceActivity = srcActivity;
        this.destinationActivityClass = dstActivityClass;
    }

    /**
     * Constructor to use in Fragments
     * */
    public StartActivityOnClickListener(Fragment srcFragment, Class<? extends AppCompatActivity> dstActivityClass)
    {
        this.sourceActivity = srcFragment.getActivity();
        this.destinationActivityClass = dstActivityClass;
    }

    /**
     * Overridden onClick() method building the Intent and calling startActivity() with it
     */
    @Override
    public void onClick(View v)
    {
        sourceActivity.startActivity(new Intent(sourceActivity, destinationActivityClass));
    }
}
yourObject.setOnClickListener(new StartActivityOnClickListener(this, YourActivity.class));