2011-04-08 26 views
2
private int pos = position; 
        @Override 
        public void onClick(View v) { 
         Toast.makeText(context, "Click-" + String.valueOf(pos), Toast.LENGTH_SHORT).show(); 
         iBean = (InboxBean)result.get(position); 
         ConstantData.inbox_subject = iBean.subject; 
         ConstantData.inbox_body = iBean.body; 
         ConstantData.inbox_postDate = iBean.postdate; 

         startActivity(new Intent(InboxActivity.this,InboxDetailActivity.class));//getting error at startActivity 
        } 
      }); 

我在startActivity線得到以下錯誤: "Cannot make a static reference to the non-static method startActivity(Intent) from the type Activity"錯誤:「不能讓從活動類型的靜態引用非靜態方法startActivity(意向)」

請幫助。

回答

6

我假設你在你的活動的內部靜態類中有這個。不要這樣做。 OnClickListeners應該存在於特定活動實例的上下文中。

+0

所以我應該做的,如果我想在列表的特定行onclick事件? – shripal 2011-04-08 06:41:57

+1

在該行上設置了一個新的OnClickListener()。 – 2011-04-08 06:42:53

+8

嘗試'context.startActivity' – pankajagarwal 2011-04-08 06:43:39

1

PLZ嘗試此樣品其具有一個主活性,即ListActivity和點擊的項目子活性,即活動顯示了其細節

主要活動類「listActivity」是

package edu.android.clickablelist; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.app.ListActivity; 
import android.content.Intent; 

public class listActivity extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Create an array of Strings, that will be put to our ListActivity 
     String[] names = new String[] {"Linux", "Windows7", "Eclipse", "Suse", "Ubuntu", "Solaris", "Android", "iPhone"}; 
     // Create an ArrayAdapter, that will actually make the Strings above 
     // appear in the ListView 
     this.setListAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_checked, names)); 

    } 
    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     // Get the item that was clicked 
     Object o = this.getListAdapter().getItem(position); 

     final String keyword = o.toString(); 

     Bundle b = new Bundle(); 
     b.putString("Test", keyword); 
     Intent i = new Intent(listActivity.this, 
       DetailsActivity.class); 
     i.putExtras(b); 
     startActivityForResult(i,0); 
    } 




} 

和子活動是作爲

package edu.android.clickablelist; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.view.*; 

public class DetailsActivity extends Activity 
{ 
    TextView tv; 

    private static final int SUB_ACTIVITY_REQUEST_CODE = 0; 
    @Override 
    public void onCreate(Bundle Savedinstances) 
     { 
      super.onCreate(Savedinstances); 
      setContentView(R.layout.details); 
      //for getting parameters passed from listActivity.java 

      Bundle b = this.getIntent().getExtras(); 
      String selItem = b.getString("Test"); 
      //how to set text of selected item? 

      tv = (TextView) findViewById(R.id.SelectedItem); 
      tv.setText("You are viewing Details of " + selItem); 
      Button btn = (Button) findViewById(R.id.btnClick2); 
      btn.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View arg0) { 
      setResult(RESULT_OK); 
      finish(); 
      } 
      }); 
     } 
    //this is important to get result of StartActivityForResult 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == SUB_ACTIVITY_REQUEST_CODE){ 
       Bundle b = data.getExtras(); 
       tv.setText(b.getString("Test")); 
     } 
    } 




} 

您還需要在 「AndroidManifest.xml中」 添加子活動的參考

對於上面的代碼示例XML是

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="edu.android.clickablelist" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".listActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".DetailsActivity" 
        class=".DetailsActivity" 
        android:label="DetailsActivity"> 
     </activity> 
    </application> 
</manifest> 

希望這將有助於

5

爲了讓靜態引用非靜態方法,你需要使用活動或應用程序的情況下給他們打電話。

當您需要從非活動類中調用活動時,也是如此。

以下類型的代碼可用於

Intent cc=new Intent(yourcontext,Yourpackagename.ClassName.class); 
yourcontext.startActivity(cc); 
相關問題