Android: - 用于处理视图点击等的单独类;

时间:2016-07-09 15:56:46

标签: java android android-layout oop

我是开发领域的新手。我正在开发android应用程序,在我的activity_main布局中,我有许多不同的项目。单击其中一个按钮后,顶部布局将替换为新布局。

现在我没有在我的主类中定义新的布局按钮,textview等,而是希望有一个单独的类可以初始化我的按钮等,而且在那个类中我可以声明onClickListners。

在我想要的主要活动中: -

public void onCreate(){

button bb = (Button)findViewById(R.id.mybutton);
View CurrentContentView= getLayoutInflater().inflate(R.layout.activity_main, null, false);
bb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 new MyNewViewInit(CurrentContentView);
            }
        });


}

在我的MyNewViewInit()类中: -

 public class MyNewViewInit{

    ImageButton backbutton;
    ChipsMultiAutoCompleteTextview search;
    ImageButton searchclear;
    ImageButton modeTime;
    ImageButton  modeTag;
    TextView modeTimeTxt;
    TextView modeTagTxt;
    ScrollView mainScroll;
    ScrollView selectedScroll;

    public MyNewViewInit(View v){
        backbutton = (ImageButton)v.findViewById(R.id.backbutton);
        search = (ChipsMultiAutoCompleteTextview)v.findViewById(R.id.search);
        searchclear = (ImageButton)v.findViewById(R.id.searchclear);
        modeTime = (ImageButton)v.findViewById(R.id.modeTime);
        modeTag = (ImageButton)v.findViewById(R.id.modeTag);
        modeTimeTxt = (TextView)v.findViewById(R.id.modeTimeTxt);
        modeTagTxt = (TextView)v.findViewById(R.id.modeTagTxt);
        mainScroll = (ScrollView)v.findViewById(R.id.HAT1);
        selectedScroll = (ScrollView)v.findViewById(R.id.HAT2);
        tag = new OtherHelper().arrayread();
        mainHashTag.setVisibility(View.GONE);
        selectedHashTag.setVisibility(View.GONE);
        clickListners();


    }

public void clickListners(){

        backbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        searchclear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        modeTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });

        modeTimeTxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        modeTag.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        modeTagTxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });


    }

}

因此,当我尝试使用此代码时,onclicklistner无法正常工作。

这样做的最佳方法是什么。

由于

3 个答案:

答案 0 :(得分:0)

在班上写一个界面,

    class MyNewViewInit{

    public interface ClickListenerInterface{
        void onCLickSomething(Something something);
    }

    ClickListenerInterface mClickListener;
    ...
     public MyNewViewInit(View v,ClickListenerInterface clickListener){
         mClickListener = clickListener;
         ...
    }

    public void clickListners(){
        ...
        backbutton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mClickListener!=null){
                    mClickListener.onCLickSomething(v);
                    }else{
                    //throw an error that activity should implement ClickListenerInterface
                    }
                }
            });
    }
    }

在您的活动中,

class MyActivity extends Activity implements ClickListenerInterface{
    public void onCreate(){
        bb.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 new MyNewViewInit(CurrentContentView,this);
                 //if using Android Studio, then use the context menu to implement the                     interface
            }
        });
    }

    void onCLickSomething(Something something){
        //do something with something
    }
}

答案 1 :(得分:0)

你可以尝试做一个抽象类扩展Activity,比如:

public abstract class MyInitActivity extends Activity
{
    EditText  editText;
    TextView textView;

    @Override
    public void setContentView(int layoutResID)
    {
        super.setContentView(layoutResID);

        editText = (EditText)findViewById(R.id.editText);
        textView = (TextView)findViewById(R.id.textView);
    }
}

在您的主要活动中,您可以扩展您的抽象类,例如:

public class MainActivity extends MyInitActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /*********** Listener ************/
    public void onButtonClick(View v)
    {
        textView.setText(editText.getText().toString());
    }
}

您还可以在抽象类

中实现onClick()

我不知道它是否是一个好习惯,我更喜欢使用视图参数进行方法,并在layout.xml文件中设置此方法。

答案 2 :(得分:0)

我在其中一个代码中使用了这个

第1步 在布局中声明按钮(XML文件)

第2步 声明所有你的按钮 -

Button btn1 = (Button)findViewById(R.id.btn1);
Button btn2 = (Button)findViewById(R.id.btn2);
Button btn3 = (Button)findViewById(R.id.btn3);

............等等 第3步

实现View.OnClickListener

现在在第2步之后执行此操作

btn1.setOnClickListener(this);

。 。 。 所有

的方式相同

第4步:  在Onclick中使用开关盒

public void OnClick(View v)
{
case:R.id.btn1{
//ur command similarly use multiple case stmt for many button
}

}