這裏的SU就是一個簡單的xml幫助類,很簡單就不放代碼了。
雖然這玩意有點傻,但是這是一個比賽的設置頁面較爲簡單的設置方法,總不能一個EditText的綁定進行數據設置之類的,太麻煩了,比賽畢竟是比的是時間。
/**
* 首先明確思路
* 1.我們爲什麼要創建這個類?
* 因爲我們要在這個類裏面進行主頁面的數據的更改。
* 2.創建這個類的時候需要哪些附屬類,作用是什麼?
* 首先,在佈局文件裏面使用的是ListView這個控件,使用這個控件的原因是:代碼量小
* 沒有那麼多的findViewById,並且做出來的UI界面也比較好看;所以跟着ListView控件
* 隨之而來的有BaseAdapter適配器幫助類,以及數據類,視圖控件幫助類。
*/
public class setActivity extends Activity {
//定義好相關的對象,並及時的初始化,防止沒有必要的空對象異常
private SU su;//SU工具類的對象,用來儲存以及讀取數據。
private List<Data> mlist;//數據數組,這裏使用的是ArrayList數組
private String[] values,names;//定義兩個String類型的數組,一個用來存入數據,一個用來存入標題
private ListView listView;//這個就不用多說了
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set);
//將佈局文件關聯此類
su=new SU(getApplicationContext());
//初始化相關的對象
values=new String[]{"數據標題1,數據標題2"};
listView=findViewById(R.id.list);
names=new String[]{"數據1,數據2"};
mlist=new ArrayList<>();
//首先的,如果是第一次打開程序的話,當沒有數據在本地存儲的時候
//先把數據存一遍,不然主頁面會拋異常,甚至直接崩
if(su.get("0").equals("NO")){
//for循環,沒什麼東西
for(int i=0;i<names.length;i++){
su.set(""+i,values[i]);
}
}else {
//如果不是第一次的話,那麼也許本地的數據已經被重新寫入了,那麼就for循環讀取,將數組的數據進行刷新
for(int i=0;i<names.length;i++){
if(!su.get(""+i).equals("NO")){
values[i]=su.get(""+i);
}
}
}
//調用刷新函數
re();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
al(i);
}
});
}
public void re(){
//首先的,將list裏面的數據全部清除,然後再重新寫入
mlist.clear();
for(int i=0;i<values.length;i++){
mlist.add(new Data(names[i],values[i]));
}
MyBaseAdapter baseAdapter =new MyBaseAdapter(mlist);
//新建適配器對象,應用到ListView裏面
listView.setAdapter(baseAdapter);
}
class MyBaseAdapter extends BaseAdapter{
//適配器幫助類
private List<Data> list;
public MyBaseAdapter(List<Data> liste){
list=liste;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
//如果這個視圖不存在的時候,則會新建一個ViewHolder對象,然後將
//通過LayoutInflater將佈局文件綁定過來
ViewHolder viewHolder;
if(view==null){
viewHolder=new ViewHolder();
view= LayoutInflater.from(getApplicationContext()).inflate(R.layout.item,null);
viewHolder.name=view.findViewById(R.id.name);
viewHolder.value=view.findViewById(R.id.value);
view.setTag(viewHolder);
}else {
//如果視圖已經存在了,也就是說,findViewByID也就沒有必要了
//就直接通過view.getTag的方法拿過來
viewHolder= (ViewHolder) view.getTag();
}
Data data =list.get(i);
viewHolder.value.setText(data.value);
viewHolder.name.setText(data.name);
return view;
}
class ViewHolder{
TextView name,value;
}
}
class Data{
String name,value;
public Data(String name, String value) {
this.name = name;
this.value = value;
}
}
public void al(final int num){
/**
* 彈窗:推薦builder,因爲可以自己添加按鈕,但是沒有dissmiss方法,但是可以使用create方法返回一個AlertDialog
*/
AlertDialog.Builder builder=new AlertDialog.Builder(setActivity.this);
View view =LayoutInflater.from(getApplicationContext()).inflate(R.layout.dig,null);
final EditText editText =view.findViewById(R.id.editText);
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//將點擊的是哪一個item傳入進來,進行數據的更新
values[num]=editText.getText().toString();
//然後再次刷新一下adapter
re();
}
});
builder.setView(view);
builder.show();
}
public void set(View view){
for(int i=0;i<values.length;i++){
su.set(""+i,values[i]);
//儲存按鈕,將數據全部再次寫入
}
}
public void f(View view){
finish();
}
}