此代码成功运行为从左到右的菜单滑块,我想在菜单中执行ListView的onclick,我尝试了各种方法,但没有成功。我调试代码但控件无法进入onClick。
public class MainActivity extends ListActivity {
ListView teams;
ArrayList<String> arr = new ArrayList<String>();
TextView tv0,tv1;
FlyOutContainer root; ///////class for slider
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv0 = (Button)findViewById(R.id.tv0);
tv1 = (Button)findViewById(R.id.tv1);
this.root =
(FlyOutContainer)this.getLayoutInflater().inflate(R.layout.activity_main, null);
this.setContentView(root);
teams=getListView();
arr.add("Introduction");
arr.add("Preface");
arr.add("Preamble");
arr.add("Contents");
arr.add("Articles");
arr.add("Schedules");
arr.add("Appendix");
arr.add("Amendment");
ArrayAdapter<String> adptr = new
ArrayAdapter<String>this,android.R.layout.simple_list_item_1,arr);
setListAdapter(adptr);
//
// arr.setOnItemClickListener(new OnItemClickListener() {
// public void onItemClick(AdapterView<?> parent, View view,
// int position, long id) {
//
// Toast.makeText(getBaseContext(),getTitle(),Toast.LENGTH_SHORT).show();
// }
// });
/*
teams.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = teams.getId();
if(id==0)
{
tv0.setText("Introduction");
tv1.setText("India ie. Bharat is a Union of States.");
}
if(id==1)
{
tv0.setText("Preface");
}
if(id==2)
{
tv0.setText("Preamble");
}
}
});
*/
teams.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
if(position==1)
{
tv0.setText("Introduction");
tv1.setText("India ie. Bharat is a Union of States.");
toggleMenu(arg1);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void toggleMenu(View v){
this.root.toggleMenu();
}
}
我尝试了很多但却犯了很多错误!
任何人都可以给我一个具体的答案 感谢...
logcat的:
12-03 13:00:37.031: E/AndroidRuntime(2690): FATAL EXCEPTION: main
12-03 13:00:37.031: E/AndroidRuntime(2690): java.lang.NullPointerException
12-03 13:00:37.031: E/AndroidRuntime(2690): at com.example.indianconstitution.MainActivity$1.onItemClick(MainActivity.java:88)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.widget.AbsListView$1.run(AbsListView.java:3463)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.os.Handler.handleCallback(Handler.java:730)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.os.Handler.dispatchMessage(Handler.java:92)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.os.Looper.loop(Looper.java:137)
12-03 13:00:37.031: E/AndroidRuntime(2690): at android.app.ActivityThread.main(ActivityThread.java:5103)
12-03 13:00:37.031: E/AndroidRuntime(2690): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 13:00:37.031: E/AndroidRuntime(2690): at java.lang.reflect.Method.invoke(Method.java:525)
12-03 13:00:37.031: E/AndroidRuntime(2690): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
12-03 13:00:37.031: E/AndroidRuntime(2690): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-03 13:00:37.031: E/AndroidRuntime(2690): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
您尝试在设置内容视图之前检索tv0
和tv1
次观看。当您尝试访问它们时,tv0和tv1将为null。设置内容视图后移动findViewById(...)
来电。前
super.onCreate(savedInstanceState);
this.root = (FlyOutContainer)this.getLayoutInflater().inflate(R.layout.activity_main, null);
this.setContentView(root);
tv0 = (Button)findViewById(R.id.tv0);
tv1 = (Button)findViewById(R.id.tv1);
答案 1 :(得分:0)
类似的东西应该有效:
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(root);
tv0 = (Button)findViewById(R.id.tv0);
tv1 = (Button)findViewById(R.id.tv1);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer_listview);
this.root =
(FlyOutContainer)this.getLayoutInflater().inflate(R.layout.activity_main, null);
teams=getListView();
arr.add("Introduction");
arr.add("Preface");
arr.add("Preamble");
arr.add("Contents");
arr.add("Articles");
arr.add("Schedules");
arr.add("Appendix");
arr.add("Amendment");
ArrayAdapter<String> dataAdapter = new
ArrayAdapter<String>(this,R.layout.simple_list_item_1,arr);
mDrawerListView.setAdapter(dataAdapter); //mDrawerListView is a ListView of your drawer
mDrawerListView.setOnItemClickListener(new DrawerItemClickListener());
这声明了DrawerItemClickListener。把它放在onCreate()
之外private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//do something according to position
switch (position) {
case 0: //do something
break;
case 1:
break;
}
}
}
答案 2 :(得分:0)
好的,我弄错了:
tv0&amp; tv1声明为TextView但使用
tv0 = (Button)findViewById(R.id.tv0);
代替
tv0 = (TextView)findViewById(R.id.tv0);
&安培;其余的代码绝对没问题