2014-03-12 50 views
-1

我打電話我Main.javaAndroidManifest.xmlMain.java文件的onCreate方法創建的MainView.java一個新實例,並送過來Context。在MainView.java我有一個名爲buildView的方法,返回LinearLayout。在LinearLayout我正在創建一個Spinner和一個Button。我給了Spinner一個.setId(1)。在Button我添加一個setOnClickListener。在onClick方法中,我使用​​來引用Spinner。這是我得到一個錯誤的地方。 Eclipse要求我創建一個名爲findViewById的方法。findViewById給了我一個問題,它設置在外面方面

我複製了我的Main onCreate方法中的代碼,並將其移至MainView.java,這樣我就可以決定在開始時加載哪個View。這個想法是有FooView.java,BlahView.java,所以當應用程序啓動時它會決定加載什麼?View.java。

這裏是MainView.java

public LinearLayout buildView(){ 
    this.datasource = new LocationDataSource(context); 
    this.datasource.open(); 

    LinearLayout llmain = new LinearLayout(context); 
    llmain.setOrientation(LinearLayout.VERTICAL); 
    llmain.setGravity(Gravity.CENTER_HORIZONTAL); 

    LinearLayout llcore = new LinearLayout(context); 
    llcore.setOrientation(LinearLayout.VERTICAL); 
    llcore.setLayoutParams(new LayoutParams(600,-2)); 

    TextView tv = new TextView(context); 
    String tx = "Select Location"; 
    tv.setText(tx); 
    tv.setPadding(0, 25, 0, 0); 
    llcore.addView(tv); 

    LinearLayout llTemp = new LinearLayout(context); 
    llTemp.setOrientation(LinearLayout.HORIZONTAL); 
    llTemp.setLayoutParams(new LayoutParams(600,-2)); 
    llTemp.setPadding(0, 15, 0, 0); 
    Spinner s = new Spinner(context); 
    s.setId(1); 
    s.setLayoutParams(new LayoutParams(450,80)); 
    final List<SpinnerObject> list = this.datasource.getLocation(); 
    final ArrayAdapter<SpinnerObject> adapter = new ArrayAdapter<SpinnerObject>(context, android.R.layout.simple_spinner_dropdown_item, list); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    s.setAdapter(adapter); 
    llTemp.addView(s); 

    Button b = new Button(context); 
    b.setText("Select"); 
    b.setLayoutParams(new LayoutParams(150,80)); 
    b.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View arg0) { 
      //need help here 
      //need help here 
      //need help here 
      //need help here 
      //need help here 


      Spinner spin = (Spinner)findViewById(1); 
      //String str = Integer.toString(((SpinnerObject) spin.getSelectedItem()).getId()); 

     /* if(spin.getSelectedItemPosition() == 0){ 
       Messages message = new Messages(context); 
       message.alert("ERROR", "Selecting a location is required!"); 
      }else{ 
       //loadVehicle(); 
      }*/ 
     } 

    }); 
    llTemp.addView(b);  
    llcore.addView(llTemp); 

    llmain.addView(llcore); 
    return llmain; 
} 
+0

試用爲' Spinner spin = s.getId();'在你的點擊監聽器中。 – GrIsHu

+0

你不需要findviewbyid。在onclick你可以只是getid的微調和處理。 – droid

+0

你爲什麼這樣做?爲什麼不根據你的'SharedPref'值創建'layout'文件並轉到相應的'Activity'?這樣做會更簡單。 – codeMagic

回答

1

代碼嘗試

Spinner spin = (Spinner)context.findViewById(1); 

或之前獲得的點擊最終參考您Spiner和重用它是

final tempSpinner = s; 
Button b = new Button(context); 
b.setText("Select"); 
b.setLayoutParams(new LayoutParams(150,80)); 
b.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 

    //reuse tempSpinner 

    } 
+1

正如codeMagic所說的那樣在評論中你可能不需要創建視圖programmaticaly。在res/layout /中創建一個佈局,名爲main.xml,並使用setContentView(R.layout.main) – Morendo

+0

我創建視圖動態不使用'.xml'文件 – AssemblyX

+0

它可以是有用的在某些情況下,我這樣做我正在研究的應用程序,您是否嘗試過我的解決方案? – Morendo

相關問題