2014-05-12 72 views
-1

我更多的是iOS開發人員,所以傳遞java變量似乎是一個挑戰。我擡頭望着價值和參考,沒有人爲我工作。我似乎無法理解爲什麼。由於我的申請有點複雜,所以我把它分解爲一個更簡單,更實際的問題。我的應用程序有一個Android微調,有三個類別。我想要發生的事情是簡單地根據用戶選擇的內容更改textview上的文本。在我的零散視圖中,我通過調用xml文件中的按鈕和textview從基礎開始。Getter和setter變量不起作用

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

回答

2

最簡單的辦法是把監聽到一個匿名類:

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



} 
2

我不是一個Android開發者,但你正在做的:

AskQuestions question = new AskQuestions(); 

,創建一個新的AskQuestions對象,它是不存在於你的用戶界面,讓你改變一個對象,它是沒有出現。

您需要從CustomOnItemSelectedListener引用接口的AskQuestions對象以修改該UI對象。 @DerGolem的回答顯示了一個辦法做到這一點;-)

問候,