在这个xml中,我用的是一个viewpager装的题目,而后一个显示当前题号与总题数的TextView,给textview设置点击事件:
package com.zking.administrator.project;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.drawable.BitmapDrawable;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.GridLayout;import android.widget.PopupWindow;import android.widget.RelativeLayout;import android.widget.ScrollView;import android.widget.TextView;import android.widget.Toast;import com.zking.administrator.application.MyApplication;import com.zking.administrator.entity.Dbhelper;import com.zking.administrator.entity.Questions;import com.zking.administrator.fragment.Fragment_orderTest;import java.util.ArrayList;import java.util.List;public class OrderTestActivity extends AppCompatActivity { private ViewPager viewpager_order; private List<Fragment_orderTest> fragment_orderTests=new ArrayList<>(); private SQLiteDatabase database; private Questions questions; private TextView frame_order_test_tv_count; private int _id; private int fid; private GridLayout gridLayout; private int gridindex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_order_test); frame_order_test_tv_count = (TextView) findViewById(R.id.frame_order_test_tv_count); viewpager_order = (ViewPager) findViewById(R.id.viewpager_order); //获得当前page下标加一作为进入练习的第一题 int x=viewpager_order.getCurrentItem(); int y=x+1; //连接数据库 Dbhelper dbhelper=new Dbhelper(this,"jszks2017.db",null,1); //读取数据 database = dbhelper.getReadableDatabase(); //执行sql语句 final Cursor cursor=database.rawQuery("select * from question",null); //给textView设置最大数据个数 frame_order_test_tv_count.setText(y+"/"+cursor.getCount()); //给frame_order_test_tv_count设置弹出PopupWindow frame_order_test_tv_count.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //在当前activity中添加一个布局ScrollView final ScrollView ScrollView=new ScrollView(OrderTestActivity.this); //该布局中设置一个内部布局GridLayout gridLayout = new GridLayout(OrderTestActivity.this); //设置每行显示7个数据 gridLayout.setColumnCount(7); gridLayout.setBackgroundColor(Color.WHITE); //遍历出数据库中题目的个数 for (int i =1; i <=cursor.getCount() ; i++) { //设置Button布局 Button bu=new Button(OrderTestActivity.this); //给button设置值 bu.setText(i+""); final int finalJ = i; //getCurrentItem是该题当前的题号,是从0开始计算,而i是从1,所以要-1才能对应题目 if (viewpager_order.getCurrentItem()==i-1){ bu.setBackgroundColor(Color.YELLOW); } //给button设置点击事件 bu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //jumpViewParger(null, finalJ-1); view.setBackgroundColor(Color.YELLOW); jumpViewParger(null, finalJ-1); View vn= gridLayout.getChildAt(gridindex); vn.setBackgroundColor(Color.parseColor("#FFF4F2F2")); gridindex=finalJ-1; } }); gridLayout.addView(bu); } //给ScrollView添加布局 ScrollView.addView(gridLayout); //实例化一个popupWindow PopupWindow mPopupWindow1 = new PopupWindow(ScrollView, 1200, 500, true); //可触摸关闭 mPopupWindow1.setTouchable(true); //触摸外部关闭 mPopupWindow1.setOutsideTouchable(true); //设置背景 mPopupWindow1.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null)); mPopupWindow1.showAsDropDown(v,0,0); } }); tv_order_test_titleTop.setText("第 "+y+" 题"); //判断是否有下一个,遍历所有 while(cursor.moveToNext()){ questions = new Questions(); questions.set_id(cursor.getInt(cursor.getColumnIndex("_id"))); questions.setQuestion(cursor.getString(cursor.getColumnIndex("question"))); questions.setItem1(cursor.getString(cursor.getColumnIndex("item1"))); questions.setItem2(cursor.getString(cursor.getColumnIndex("item2"))); questions.setItem3(cursor.getString(cursor.getColumnIndex("item3"))); questions.setItem4(cursor.getString(cursor.getColumnIndex("item4"))); questions.setExplain(cursor.getString(cursor.getColumnIndex("explain"))); fragment_orderTests.add(new Fragment_orderTest(questions)); } fid = MyApplication.fid; //给viewpager设置页面转换监听 viewpager_order.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { int x=position+1; //给textView设置值 frame_order_test_tv_count.setText(x+"/"+cursor.getCount()); tv_order_test_titleTop.setText("第 "+x+" 题"); questions.get_id(); } @Override public void onPageScrollStateChanged(int state) {//012 if(state==2){ if(fid ==1){ tv_favourite_photo.setBackgroundResource(R.drawable.bt_unstar); } if(fid ==0){ tv_favourite_photo.setBackgroundResource(R.drawable.bt_star); } } } }); //给viewPager设置适配器 viewpager_order.setAdapter(new MyAdapter(getSupportFragmentManager())); } class MyAdapter extends FragmentStatePagerAdapter{ public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return fragment_orderTests.get(position); } @Override public int getCount() { return fragment_orderTests.size(); } } public void jumpViewParger(View view,int i){ viewpager_order.setCurrentItem(i); }}绑定数据也一起在这里了。它还牵扯了一个class,question.class
package com.zking.administrator.entity;import android.database.Cursor;public class Questions { private int _id; private String question; private String item1; private String item2; private String item3; private String item4; private String image; private int answer; private String explain; private int favourite; private int qerror; private int count; public Questions() { } public int getFavourite() { return favourite; } public void setFavourite(int favourite) { this.favourite = favourite; } public int getQerror() { return qerror; } public void setQerror(int qerror) { this.qerror = qerror; } public String getExplain() { return explain; } public void setExplain(String explain) { this.explain = explain; } public int getAnswer() { return answer; } public void setAnswer(int answer) { this.answer = answer; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getQuestion() { return question; } public void setQuestion(String question) { this.question = question; } public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } public String getItem1() { return item1; } public void setItem1(String item1) { this.item1 = item1; } public String getItem2() { return item2; } public void setItem2(String item2) { this.item2 = item2; } public String getItem3() { return item3; } public void setItem3(String item3) { this.item3 = item3; } public String getItem4() { return item4; } public void setItem4(String item4) { this.item4 = item4; }}这就是我这次弄出的一个小功能,不过,有个bug,就是你在点击popupwindow中的按钮时,不退出popupwindow,再继续点击按钮,它最开始的那个按钮的状态还在,最好的是,在整个popupwindow 只会有两个按钮有状态:一个是上一次的题号,一个是当前的题号。这个问题还一直困扰着我,如果有大神弄出了,望能指教一下,谢谢!
新闻热点
疑难解答