2011-05-06 61 views
3

嗨我有一個自定義listview的基礎適配器類。我的listview有一個按鈕。當我按下該按鈕時,我必須將控件重定向到另一個活動。當我使用Intent重定向時,它會在運行時顯示錯誤。這是我的代碼,如何在baseadapter類中使用intent

public View getView(final int position, View convertView, ViewGroup parent) 
{ 

    convertView = mInflater.inflate(R.layout.listview_elements, null); 

    TextView textview1 = (TextView) convertView.findViewById(R.id.TextView01); 
    TextView textview2 = (TextView) convertView.findViewById(R.id.TextView02); 
    TextView textview3 = (TextView) convertView.findViewById(R.id.TextView03); 
    Button buy=(Button)convertView.findViewById(R.id.buy_song_button); 
    buy.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 

     Intent intent=new Intent(con,MainActivity.class); 
     con.startActivity(intent); 


     } 
    }); } 

如何從我的基礎適配器類重定向到另一個活動?

+0

whats logcat輸出?錯誤堆棧? – sat 2011-05-06 07:50:06

+0

05-06 13:12:49.246:ERROR/AndroidRuntime(1416):android.util.AndroidRuntimeException:從Activity上下文外調用startActivity()需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎? – 2011-05-06 07:53:25

+0

你可以使用intent.setFlags(FLAG_ACTIVITY_NEW_TASK);我知道在適配器中這樣做並不是好習慣,因爲你希望我們的適配器只處理與GUI相關的操作,但是some1可以解釋得比我所說的要好得多 – chaitanya 2011-05-06 07:58:10

回答

14

我已經解決了這個問題我自己。 Intent中的一個簡單修改解決了它。 我必須爲我的意圖設置標誌。而已。

public View getView(final int position, View convertView, ViewGroup parent) 
    { 

convertView = mInflater.inflate(R.layout.listview_elements, null); 

TextView textview1 = (TextView) convertView.findViewById(R.id.TextView01); 
TextView textview2 = (TextView) convertView.findViewById(R.id.TextView02); 
TextView textview3 = (TextView) convertView.findViewById(R.id.TextView03); 
Button buy=(Button)convertView.findViewById(R.id.buy_song_button); 
buy.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 

    Intent intent=new Intent(context,MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 


    } 
}); } 
+1

你在哪裏得到你的上下文對象? – spagi 2012-04-14 20:20:43

+1

好的我發現它來自v.getContext(); – spagi 2012-04-14 20:37:08

1

使用v.getContext(),而不是CON中的onClick方法

+0

但是這並沒有什麼區別。 – 2011-05-06 09:22:35

2

試試這個:

Intent intent=new Intent(activity.getApplicationContext(),MyPlace.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.putExtra("city", "Yangon"); 
    activity.getApplicationContext().startActivity(intent); 
+0

爲我工作感謝 – Mahesh 2013-03-14 08:52:14

1

此代碼爲我工作,尤其是當你有gridview的適配器底座適配器類:通過構造函數

cmnt_btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.e("position",position+""); 
       Intent comment_page=new Intent(view.getContext(),comments_page.class); 
       comment_page.putExtra("position",position); 
       view.getContext().startActivity(comment_page); 
      } 
1

傳遞上下文,然後只用這代碼行:

Intent intent=new Intent(context.getApplicationContext(), YourActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
     context.getApplicationContext().startActivity(intent); 

謝謝:)

相關問題