在OnClickListener ListView中设置变量时创建全局变量并获取错误

时间:2013-03-27 02:14:21

标签: android

我查看了很多帖子并尝试了它们,但似乎没有任何效果。我想这可能是我错过的。这是我正在尝试做的和我的问题:我正在尝试创建一个全局变量,所以在我的主要活动上,当用户从ListView中选择一个项目时,我想将该项目分配给变量和在我的申请中使用它。

我们创建了一个类并将其扩展到应用程序,如下所示:

import android.app.Application;

公共类GlobalVariables扩展了Application {

private String mStringValue;

public String getSomeVariable() {
    return mStringValue;
}

public void setSomeVariable(String someVariable) {
    this.mStringValue = someVariable;
}

}

然后在我的主要活动中,我把这段代码设置为变量:

public class MainActivity extends Activity {    

@Override 
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.activity_main);     


 ListView.setOnItemClickListener(new OnItemClickListener() {    

 @Override   
 public void onItemClick(AdapterView<?> listView, View view,       
int position, long id) {    

// Get the cursor, positioned to the corresponding row in the result set    
Cursor cursor = (Cursor) listView.getItemAtPosition(position);      
// Get the Customer Name from this row in the database.    
String countryCode = cursor.getString(cursor.getColumnIndexOrThrow("CustomerName"));    

Toast.makeText(getApplicationContext(), countryCode, Toast.LENGTH_SHORT).show();      

((GlobalVariables) this.getApplication()).setSomeVariable(countryCode);

   }   

});  

问题是我收到错误“此方法的类型为新的AdapterView.OnItemClickListener(){}”的方法getApplication()未定义:

((GlobalVariables) this.getApplication()).setSomeVariable(countryCode);

我读了一篇建议做以下代码的帖子,但后来我又得到了多个错误:

  • 方法getApplication()未定义类型GlobalVariables
  • 在范围

    中无法访问GlobalVariables类型的封闭实例

    ((GlobalVariables)GlobalVariables.this.getApplication())。setSomeVariable(“foo”);

您可以给我的任何帮助将不胜感激。

谢谢,

2 个答案:

答案 0 :(得分:0)

OnItemClickListener()是一个匿名内部类。这意味着当您this内部this时,OnItemClickListener实际上引用了getApplication()类型的对象,该对象没有方法((GlobalVariables) MainActivity.this.getApplication()).setSomeVariable(countryCode);

尝试:

{{1}}

答案 1 :(得分:0)

为什么不将GlobalVariables定义如下:

public class GlobalVariables
{
    static String mStringValue;
}   

然后,您可以在应用中的任何位置GlobalVariables.mStringValue使用它,例如GlobalVariables.mStringValue = countryCode;