Java Getter和setter变量不工作
我更像是一个iOS开发人员,所以传递java变量似乎是一个挑战。我查阅了价值传递和引用,没有一个对我有用。我似乎不明白为什么。由于我的应用程序解释起来有点复杂,我把它分解成一个更简单、更具体的问题。我的应用程序有一个android微调器,有三个类别。我想要做的是根据用户的选择简单地更改textview上的文本。在我的片段视图中,我从基本开始,从xml文件中调用按钮和textviewJava Getter和setter变量不工作,java,android,Java,Android,我更像是一个iOS开发人员,所以传递java变量似乎是一个挑战。我查阅了价值传递和引用,没有一个对我有用。我似乎不明白为什么。由于我的应用程序解释起来有点复杂,我把它分解成一个更简单、更具体的问题。我的应用程序有一个android微调器,有三个类别。我想要做的是根据用户的选择简单地更改textview上的文本。在我的片段视图中,我从基本开始,从xml文件中调用按钮和textview public class AskQuestions extends Fragment { private But
public class AskQuestions extends Fragment {
private Button selectAnswer;
private TextView displayAnswer;
private Spinner spinner;
public String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public void onCreate(Bundle savedInstabceState){
super.onCreate(savedInstabceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Fetching layout
View rootView = inflater.inflate(R.layout.fragment_questions, container, false);
selectAnswer = (Button) rootView.findViewById(R.id.button1);
displayAnswer = (TextView) rootView.findViewById(R.id.textView1);
spinner = (Spinner) rootView.findViewById(R.id.planets_spinner);
//Setting spinner to custom class I created
spinner.setOnItemSelectedListener(new CustomOnItemSelectedListener());
//Button clicks when the user selects an item of the spinner, and changes the text
//based on what item is selected.
selectAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//This is where I am confused.
result = getResult();
displayAnswer.setText(result);
}
});
return rootView;
}
}
嗯。这主要是我的麻烦所在。如何根据用户从此类中选择的内容更改textview
public class CustomOnItemSelectedListener implements OnItemSelectedListener {
//Calling object in to display in the view
AskQuestions question = new AskQuestions();
//When a user selects an item off of the spinner, the position changes
//accordingly (spinner works just fine, changing the text on the textview from this class
//seems to be most of my trouble.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
switch (pos) {
case 0:
//This does not work when a user selects an item, and clicks a button to review the result
question.setResult("You selected index zero");
break;
case 1:
//Does not work
question.setResult("You selected index one");
break;
case 2:
//Does not work
question.setResult("You selected index 2");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
公共类CustomOnItemSelectedListener实现OnItemSelectedListener{
//调用中的对象以在视图中显示
AskQuestions=新的AskQuestions();
//当用户从微调器中选择一个项目时,位置会发生变化
//相应地(微调器工作正常,从这个类更改textview上的文本)
//似乎是我最大的麻烦。
@凌驾
已选择公共视图(AdapterView父视图、视图、int pos、,
长id){
开关(pos){
案例0:
//当用户选择项目并单击按钮查看结果时,这不起作用
问题.setResult(“您选择了索引零”);
打破
案例1:
//不起作用
问题.setResult(“您选择了索引一”);
打破
案例2:
//不起作用
问题.setResult(“您选择了索引2”);
打破
}
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
}
我不是安卓开发者,但你在做:
AskQuestions question = new AskQuestions();
这将创建一个新的AskQuestions
对象,该对象不在用户界面中,因此您正在更改一个未显示的对象
您需要从CustomOnItemSelectedListener
中引用界面的AskQuestions
对象,以便修改该UI对象。@DerGolem的答案向您展示了一种方法;-)
关于,最简单的选择是将侦听器转换为匿名类:
public class AskQuestions extends Fragment {
private Button selectAnswer;
private TextView displayAnswer;
private Spinner spinner;
public String result;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public void onCreate(Bundle savedInstabceState){
super.onCreate(savedInstabceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Fetching layout
View rootView = inflater.inflate(R.layout.fragment_questions, container, false);
selectAnswer = (Button) rootView.findViewById(R.id.button1);
displayAnswer = (TextView) rootView.findViewById(R.id.textView1);
spinner = (Spinner) rootView.findViewById(R.id.planets_spinner);
//Setting spinner to custom class I created
spinner.setOnItemSelectedListener(new OnItemSelectedListener (){
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
switch (pos) {
case 0:
displayAnswer.setText("You selected index 0");
break;
case 1:
displayAnswer.setText("You selected index one");
break;
case 2:
displayAnswer.setText("You selected index 2");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
//Button clicks when the user selects an item of the spinner, and changes the text
//based on what item is selected.
selectAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
//This is where I am confused.
result = getResult();
displayAnswer.setText(result);
}
});
return rootView;
}
}
public类AskQuestions扩展片段{
私人按钮选择应答;
私有文本视图显示应答;
私人纺纱机;
公共字符串结果;
公共字符串getResult(){
返回结果;
}
公共void setResult(字符串结果){
this.result=结果;
}
创建时的公共void(Bundle savedInstabceState){
super.onCreate(savedInstabceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//抓取布局
视图根视图=充气机。充气(R.layout.fragment\u问题,容器,错误);
选择Answer=(按钮)rootView.findViewById(R.id.button1);
displayAnswer=(TextView)rootView.findViewById(R.id.textView1);
微调器=(微调器)rootView.findViewById(R.id.plants\u微调器);
//将微调器设置为我创建的自定义类
微调器.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图、int pos、,
长id){
开关(pos){
案例0:
displayAnswer.setText(“您选择了索引0”);
打破
案例1:
displayAnswer.setText(“您选择了索引一”);
打破
案例2:
displayAnswer.setText(“您选择了索引2”);
打破
}
}
@凌驾
未选择公共无效(AdapterView arg0){
//TODO自动生成的方法存根
}
});
//当用户选择微调器的项目并更改文本时,单击按钮
//根据选择的项目。
选择Answer.setOnClickListener(新建视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
//这就是我困惑的地方。
result=getResult();
displayAnswer.setText(结果);
}
});
返回rootView;
}
}