Reputation: 1258
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
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();
}
}*/
}
Upvotes: 2
Views: 8403
Reputation: 439
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()`
Upvotes: 0
Reputation: 27
Inside the listener the context get lost... You have to retrieve it using v.getContext
Upvotes: 1
Reputation: 1258
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.
Upvotes: 0
Reputation: 18489
What is "that" here??.Use RemaindersPage.this in place of "that". You will get success.
Upvotes: 0
Reputation: 3698
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();
}
});
Upvotes: 13
Reputation: 10353
Change: i=new Intent(that,weekly.class);
To: i=new Intent(RemaindersPage.this, weekly.class);
and try again
Upvotes: 2