我是开发领域的新手。我正在开发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无法正常工作。
这样做的最佳方法是什么。
由于
答案 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
}
}