Intent does not work from within onClickListener?
In the code i am writing i placed an intent to open a new activity inside an onclicklistener but it is not working. Other code in the listener works, also if i place the same intent outside the listener in an "alternate location" it works. So i am not sure what the problem is here. i would really appreciate any help , thanks.
This is the code used in the tab activity that contains the button for which the Listener is written.
public class RemaindersPage extends Activity
{
com.commsware.pgtracker.RemainderControl rc1;
int count;
LinearLayout.LayoutParams lp1,lp2;
Button btn1,btn2,btn3;
LinearLayout ll1,ll2;
Intent i;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.remainders);
//<Alternate Location> : Intent works if placed here
TabHost th=(TabHost)findViewById(R.id.tabhost);
th.setup();
TabHost.TabSpec spec=th.newTabSpec("tag1");
spec.setContent(R.id.tab1);
spec.setIndicator("REMAINDERS");
th.addTab(spec);
spec=th.newTabSpec("tag2");
spec.setContent(R.id.tab2);
spec.setIndicator("AUTO REMAINDERS");
th.addTab(spec);
spec=th.newTabSpec("tag3");
spec.setContent(R.id.tab3);
spec.setIndicator("USER REMAINDERS");
th.addTab(spec);
//adding remainder control
int ht=LayoutParams.WRAP_CONTENT;
int wt=LayoutParams.FILL_PARENT;
lp1=new LinearLayout.LayoutParams(wt,ht);
ll2=(LinearLayout)findViewById(R.id.tab1_ll);
//Adding Listeners for the buttons in each tab
//Tab1
btn1=(Button)findViewById(R.id.tab1_add1);
btn1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
btn1.setText("");
i=new Intent(RemaindersPage.this,weekly.class);
startActivity(i);
//AddRemainder();
}
});
//Tab2
开发者_JAVA技巧 btn2=(Button)findViewById(R.id.tab2_add2);
btn2.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
btn2.setText("");
//AddRemainder();
}
});
//Tab3
btn3=(Button)findViewById(R.id.tab3_add3);
btn3.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
btn3.setText("");
//AddRemainder();
}
});
}
//draw a new reminder_control instance
private void AddRemainder()
{
rc1=new com.commsware.pgtracker.RemainderControl(RemaindersPage.this);
rc1.setId(1000+count);
ll2.addView(rc1,lp1);
rc1.SetText("MESSAGE "+Integer.toString(count),0);
count++;
}
//query for all rows in the table and obtain a cursor
/*private void fillData()
{
cursor=dbHelper.fetchAllReminders();
startManagingCursor(cursor);
}
@Override
protected void onDestroy()
{
super.onDestroy();
if (dbHelper != null)
{
dbHelper.close();
}
}*/
}
Try like this
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent myIntent = new Intent(v.getContext(),
NextActivity.class);
startActivityForResult(myIntent, 0);
finish();
}
});
Change: i=new Intent(that,weekly.class);
To: i=new Intent(RemaindersPage.this, weekly.class);
and try again
Inside the listener the context get lost... You have to retrieve it using v.getContext
What is "that" here??.Use RemaindersPage.this in place of "that". You will get success.
I found that the error is actually in the xml. The button for which the listener was written was never visible on the screen. Once i fixed that it was ok. Totally my bad.
Here, you are using this as a first parameter of Intent() constructor. But since you are in the scope of OnClickListener() you will not have the access of this. So basically you need to get the context of the current activity. This can be done by calling getContext() on the view (the parameter of onClickListener().
`v.getContext()`
加载中,请稍侯......
精彩评论