Java Getter和setter变量不工作

Java Getter和setter变量不工作,java,android,Java,Android,我更像是一个iOS开发人员,所以传递java变量似乎是一个挑战。我查阅了价值传递和引用,没有一个对我有用。我似乎不明白为什么。由于我的应用程序解释起来有点复杂,我把它分解成一个更简单、更具体的问题。我的应用程序有一个android微调器,有三个类别。我想要做的是根据用户的选择简单地更改textview上的文本。在我的片段视图中,我从基本开始,从xml文件中调用按钮和textview public class AskQuestions extends Fragment { private But

我更像是一个iOS开发人员,所以传递java变量似乎是一个挑战。我查阅了价值传递和引用,没有一个对我有用。我似乎不明白为什么。由于我的应用程序解释起来有点复杂,我把它分解成一个更简单、更具体的问题。我的应用程序有一个android微调器,有三个类别。我想要做的是根据用户的选择简单地更改textview上的文本。在我的片段视图中,我从基本开始,从xml文件中调用按钮和textview

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;
}
}