最近做了一个项目,用到一个viewpager,我知道可以用两种方式填充每个页面,fragment和view,我图方便,采用了view的方式,可是当我控件都加载在每个view的布局文件里面的时候,我发现,我不能处理他们的事件,比如说我在某一页中有一个imageview,我要点击它并换掉他的背景,我就在主要的mainactivity.java中初始化了控件并设置了点击事件,此时运行后程序崩溃,我分析一遍觉得是在主maniactivity中这样写,view不可能得到改变,因为它在程序运行初期就已经在oncreate中被添加到了list中,后面再怎么处理都不可能被改变,除非只是做一些展示作用,比如放几张照片之类的. 而对于我的项目,我需要处理每一页的很多点击事件,而又不可能只在一个mainacticity中实现,所以我觉的我是不是该改用fragment的方式去实现我的目的,请大神能给一个合理的说明,如果可以,请帮忙说下view和fragment的处理事件都应该怎么搞,另外我想知道正常的项目中包应该如何划分?多谢啦
应该不是,,你应该先搞清楚具体的错误信息,然后对着logcat日志再找原因
把错误log 贴出来 可以试着解决
你要确定fragment 已经获取到控件了,在确定fragment已经获取控件的情况下可以将view部分的逻辑写到fragment里面的
这个是我的maninactivity文件,大多数我都做了标识,希望大神可以帮忙看看,我不知道用view的方式怎么去处理那些点击事件
package cn.iot.main;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import cn.iot.sildingmenu.SlidingMenu;
import cn.iot.ui_design.R;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
/**
* 目前的问题:
* (1)蓝牙连接问题、
* (2)首页中listview和viewpager的侧滑冲突问题、
* (3)布局规划问题
*/
public SlidingMenu mleftMenu;
private ListviewList;
private ViewPager viewpager;
private View view_beiwang;
private View view_search;
private View view_firstpage;
private View view_forgotten;
private View view_citysearch;
private TextView tv1;
private TextView tv2;
private TextView tv3;
private TextView tv4;
private TextView tv5;
private ImageView image_connect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mleftMenu = (SlidingMenu) findViewById(R.id.id_menu);
image_connect= (ImageView) findViewById(R.id.image_connect);
viewList=new ArrayList<View>();
//初始化并转化为view对象
view_beiwang = View.inflate(this, R.layout.view_beiwang,null);
view_search = View.inflate(this, R.layout.view_search,null);
view_firstpage = View.inflate(this, R.layout.view_firstpage,null);
view_forgotten = View.inflate(this, R.layout.view_forgotten,null);
view_citysearch = View.inflate(this, R.layout.view_citysearch,null);
viewList.add(view_beiwang);
viewList.add(view_search);
viewList.add(view_firstpage);
viewList.add(view_forgotten);
viewList.add(view_citysearch);
//初始化viewPager
//设置viewpager的滑动事件
viewpager = (ViewPager) findViewById(R.id.viewpager);
viewpager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
v.getParent().requestDisallowInterceptTouchEvent(true);//这一句是告诉父类事件,不要去处理我的touch事件
return false;
}
});
//建立适配器的对象
MypagerAdapter adapter = new MypagerAdapter(viewList);
//给viewpager添加适配器
viewpager.setAdapter(adapter);
//初始化五个textview
tv1 = (TextView) findViewById(R.id.textview_beiwang);
tv2 = (TextView) findViewById(R.id.textview_search);
tv3 = (TextView) findViewById(R.id.textview_firstpage);
tv4 = (TextView) findViewById(R.id.textview_forgotton);
tv5 = (TextView) findViewById(R.id.textview_citysearch);
//添加点击事件
tv1.setOnClickListener(this);
tv2.setOnClickListener(this);
tv3.setOnClickListener(this);
tv4.setOnClickListener(this);
tv5.setOnClickListener(this);
}
//用来为首页Imageview添加点击事件
public void bt_connect(View v){
//考虑此处加一个fragment或者view
Toast.makeText(this, "我是连接按钮", Toast.LENGTH_SHORT).show();
image_connect.setImageDrawable(getResources().getDrawable(R.drawable.connet));
}
//这是侧滑菜单的点击事件
public void toggleMenu(View v){
mleftMenu.toggle();
}
//每个底部按钮对应的view
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.textview_beiwang:
viewpager.setCurrentItem(0,false);
break;
case R.id.textview_search:
viewpager.setCurrentItem(1,false);
break;
case R.id.textview_firstpage:
viewpager.setCurrentItem(2,false);
break;
case R.id.textview_forgotton:
viewpager.setCurrentItem(3,false);
break;
case R.id.textview_citysearch:
viewpager.setCurrentItem(4,false);
break;
}
}
}
这张图片是我的主界面图片,有侧滑菜单和底部view还有viewpager组成:
我在首页做了一个,点击连接然后切换图片的事件,这是我点击首页上的连接的时候出现的错误: