我正在尝试在单击时在片段中添加一个按钮增加文本字段如果我没有使用片段但是我无法在片段中使用它,那么我可以这样做。
我已经创建了一个非常基本的测试应用程序。
t1应该将值设置为numOfClicks,但在调试中,t1值始终为null。
private int numOfClicks;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.page1, container,false);
Button button1 = (Button) v.findViewById(R.id.btn1);
button1.setOnClickListener(this);
Button button2 =(Button)v.findViewById(R.id.btn2);
button2.setOnClickListener(this);
// EditText t1 = (EditText)v.findViewById(R.id.numClicked);
// t1.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.btn1:
//button code here
//toast statement works!
//Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show();
EditText t1 = (EditText)v.findViewById(R.id.numClicked);
numOfClicks++;
t1.setText(Integer.toString(numOfClicks));
break;
case R.id.btn2:
Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show();
break;
}
}
答案 0 :(得分:1)
全局声明EditText:
EditText t1 ;
在onCreateView()中初始化:
t1 = (EditText)v.findViewById(R.id.numClicked);
在onClick()中设置文字:
t1.setText(Integer.toString(numOfClicks));
答案 1 :(得分:1)
您应该在page1.xml中声明一个名为numClicked的editText。然后你可以试试这段代码:
{
private int numOfClicks;
private EditText t1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.page1, container, false);
Button button1 = (Button) v.findViewById(R.id.btn1);
button1.setOnClickListener(this);
Button button2 = (Button) v.findViewById(R.id.btn2);
button2.setOnClickListener(this);
t1 = (EditText) v.findViewById(R.id.numClicked);
return v;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
//button code here
//toast statement works!
//Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show();
numOfClicks++;
t1.setText(Integer.toString(numOfClicks));
break;
case R.id.btn2:
Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show();
break;
}
}
}
答案 2 :(得分:1)
不这样做..为什么?
详情: EditText t1 =(EditText)v.findViewById(R.id.numClicked);
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.btn1:
//button code here
//toast statement works!
//Toast.makeText(v.getContext(), "yeah", Toast.LENGTH_SHORT).show();
EditText t1 = (EditText)v.findViewById(R.id.numClicked);
numOfClicks++;
t1.setText(Integer.toString(numOfClicks));
break;
case R.id.btn2:
Toast.makeText((v.getContext()), "button 2 pressed", Toast.LENGTH_SHORT).show();
break;
}
}
做什么?
在 onViewCreated事件中查找您的组件参考。但为什么? onViewCreated(View视图,@ Nullable Bundle savedInstanceState), view参数是referente“main”视图,她拥有此布局的所有组件。
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
t1 = (EditText)v.findViewById(R.id.numClicked);
}
不要忘记:您需要创建一个类属性,键入名称为t1的EditText来运行此示例。
答案 3 :(得分:0)
您的numOfClicks在启动时没有值,只声明未设置值。
执行您的计划:
所以答案是numOfClicks = 0;
的设定值答案 4 :(得分:0)
您呼叫v
的{{1}}中的视图onClick()
实际上是点击的按钮(也是视图)
因此,要查找文本字段,您需要通过活动查找视图。除非按钮位于与EditText不同的容器内,否则您应该通过调用v .findViewByID
获得该
答案 5 :(得分:0)
您可以使用http://jakewharton.github.io/butterknife/
然后你可以声明为:
@BindView(R.id.numClicked) EditText text;
同时声明int numOfClicks = 0;
,使其从一开始就有一个值。
并且还设置了这样的监听器:
@OnClick(R.id.btn1)
public void submit(View view) {
numOfClicks++;
text.setText(Integer.toString(numOfClicks));
}
然后在你的OnCreate中你只有这个:
ButterKnife.bind(this);
这比普通的findViewByID更好,因为视图是在编译时创建的,并且在onCreate中自动注入到Activity中,比标准初始化更有效。同样如此,视图被声明为全局视图,因此您可以在Activity
中的任何位置使用它们