English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Нажмите кнопку, сначала автоматически выполняется下拉刷新, также можно выполнить ручную обновление, после обновления добавится дополнительная строка данных. Есть четыре вкладки.
На днях наставник потребовал создать приложение для бронирования мест в компьютерных классах для бакалавров, идея пришла отсюда. Работая, встретил множество проблем, все они были решены. Эффект feels quite good, let's organize it.
MainActivity
package com.example.fragmentmytest; импортировать android.content.DialogInterface; импортировать android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; импортировать android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; импортировать android.view.View; import android.view.View.OnClickListener; импортировать android.widget.Button; импортировать android.widget.TextView; import com.example.dialog.CustomDialog; import com.example.dialog.CustomDialogChangePwd; import com.example.dialog.CustomDialogSignUp; import com.example.myapplication.CustomApplication; импортировать com.example.utils.ToastUtils; public class MainActivity extends FragmentActivity { public static final String serverAddress = "http://192.168.1.101"; public static final String serverPort = "8080"; OneFragment onefragment; TwoFragment twofragment; ThreeFragment threefragment; FourFragment fourfragment; Button btn1, btn2, btn3, btn4; OnClickListener clicklistener; TextView stu_msg; private CustomApplication app; /** * Предназначено для управления Fragment */ FragmentManager fragementManager; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); app = (CustomApplication) getApplication(); // Получить объект CustomApplication // Необходимо наследовать от FragmentActivity, чтобы использовать getSupportFragmentManager(); лучше использовать v4.app, так как его уже никто не использует fragementManager = getSupportFragmentManager(); init(); // В первый раз запускается选中 0-й tab setTabSelection(0);// по умолчанию не lehet скользить влево и вправо } public void init() { stu_msg = (TextView) findViewById(R.id.stu_msg); btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); btn3 = (Button) findViewById(R.id.btn3); btn4 = (Button) findViewById(R.id.btn4); clicklistener = new OnClickListener() { public void onClick(View arg0) { int id = arg0.getId(); switch (id) { case R.id.btn1: setTabSelection(0); break; case R.id.btn2: setTabSelection(1); break; case R.id.btn3: setTabSelection(2); break; case R.id.btn4: setTabSelection(3); break; default: break; } } }; btn1.setOnClickListener(clicklistener); btn2.setOnClickListener(clicklistener); btn3.setOnClickListener(clicklistener); btn4.setOnClickListener(clicklistener); } private void setTabSelection(int index) { clearSelection(); // Очистить предыдущее состояние выбора перед каждым новым выбором // Начать транзакцию сFragment FragmentTransaction transaction = fragementManager.beginTransaction(); // Перед тем как скрыть все Fragment, чтобы предотвратить отображение нескольких Fragment на экране hideFragements(transaction); switch (index) { case 0: btn1.setBackgroundColor(Color.parseColor("#CFEFEF")); btn1.setTextColor(Color.parseColor("#FFFFFF")); app.setRoom(btn1.getText().toString()); if (onefragment == null) { onefragment = new OneFragment(); transaction.add(R.id.framelayout, onefragment); } else { transaction.show(onefragment); onefragment.mPullRefreshListView.setRefreshing(true); } break; case 1: btn2.setBackgroundColor(Color.parseColor("#CFEFEF")); btn2.setTextColor(Color.parseColor("#FFFFFF")); app.setRoom(btn2.getText().toString()); if (twofragment == null) { twofragment = new TwoFragment(); transaction.add(R.id.framelayout, twofragment); } else { transaction.show(twofragment); twofragment.mPullRefreshListView.setRefreshing(true); } break; case 2: btn3.setBackgroundColor(Color.parseColor("#CFEFEF")); btn3.setTextColor(Color.parseColor("#FFFFFF")); app.setRoom(btn3.getText().toString()); if (threefragment == null) { threefragment = new ThreeFragment(); transaction.add(R.id.framelayout, threefragment); } else { transaction.show(threefragment); threefragment.mPullRefreshListView.setRefreshing(true); } break; case 3: btn4.setBackgroundColor(Color.parseColor("#CFEFEF")); btn4.setTextColor(Color.parseColor("#FFFFFF")); app.setRoom(btn4.getText().toString()); if (fourfragment == null) { fourfragment = new FourFragment(); transaction.add(R.id.framelayout, fourfragment); } else { transaction.show(fourfragment); fourfragment.mPullRefreshListView.setRefreshing(true); } break; default: break; } transaction.commit(); } /** * Удалить все выбранное состояние. */ private void clearSelection() { btn1.setBackgroundColor(Color.parseColor("#EFEFEF")); btn1.setTextColor(Color.parseColor("#234567")); btn2.setBackgroundColor(Color.parseColor("#EFEFEF")); btn2.setTextColor(Color.parseColor("#234567")); btn3.setBackgroundColor(Color.parseColor("#EFEFEF")); btn3.setTextColor(Color.parseColor("#234567")); btn4.setBackgroundColor(Color.parseColor("#EFEFEF")); btn4.setTextColor(Color.parseColor("#234567")); } /** * Устанавливает все Fragment в состояние скрытия. * * @param transaction * Используется для выполнения операций с Fragment */ private void hideFragments(FragmentTransaction transaction) { if (onefragment != null) { transaction.hide(onefragment); } if (twofragment != null) { transaction.hide(twofragment); } if (threefragment != null) { transaction.hide(threefragment); } if (fourfragment != null) { transaction.hide(fourfragment); } } }
Все четыре Fragment очень похожи, это первый:
package com.example.fragmentmytest; import java.util.ArrayList; import java.util.LinkedList; импортировать java.util.List; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; импортировать android.view.LayoutInflater; импортировать android.view.View; импортировать android.view.ViewGroup; import android.widget(AdapterView<?>); import android.widget.ArrayAdapter; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import com.example.adapter.MyAdapter; импортировать com.example.dao.ComputerRoomStatus; импортировать com.example.utils.ToastUtils; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener2; import com.handmark.pulltorefresh.library.PullToRefreshListView; public class OneFragment extends Fragment { String room = "204"; public PullToRefreshListView mPullRefreshListView; // private ArrayAdapter<String> mAdapter; private int mItemCount = 9; // private LinkedList<String> mListItems; private MyAdapter mAdapter; private List<ComputerRoomStatus> data; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceStatus) { View view = inflater.inflate(R.layout.twolayout, container, false); mPullRefreshListView = (PullToRefreshListView) view .findViewById(R.id.pull_refresh_list_2); mPullRefreshListView.setMode(Mode.PULL_FROM_START); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { // TODO Auto-generated method stub super.onViewCreated(view, savedInstanceState); initDatas(); // mAdapter1 = new MyAdapter(getActivity(), data); mAdapter = new MyAdapter(getActivity(), data, room,mPullRefreshListView); mPullRefreshListView.setAdapter(mAdapter); mPullRefreshListView .setOnRefreshListener(new OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView) { Log.e("TAG", "onPullDownToRefresh"); // 这里写下拉刷新的任务 new GetDataTask().execute(); } @Override public void onPullUpToRefresh( PullToRefreshBase<ListView> refreshView) { Log.e("TAG", "onPullUpToRefresh"); // 这里写上拉加载更多的任务 new GetDataTask().execute(); } }); mPullRefreshListView.setRefreshing(true); } private void initDatas() { // 初始化数据和数据源 data = new ArrayList<ComputerRoomStatus>(); for (int i = 0; i < mItemCount; i++) { data.add(new ComputerRoomStatus(i, "1", "1", "3", "1", "1", "1")); } } protected void autoRefresh() { mPullRefreshListView.setRefreshing(true); } // 请求网络接口,这里是做的假数据 private class GetDataTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params) { try { // TODO 解析json Thread.sleep(1000);}} } catch (InterruptedException e) { } возврат "" + (mItemCount++); } @Override защищенный void onPostExecute(String result) { // data.add(new // ComputerRoomStatus(1,result,result,result,result,result,result)); data.add(new ComputerRoomStatus(Integer.parseInt(result), "", "", "3", "1", "1", "1")); mAdapter.notifyDataSetChanged(); mPullRefreshListView.onRefreshComplete(); } } }
MyAdapter
пакет com.example.adapter; импортировать java.util.List; импортировать android.content.Context; импортировать android.content.DialogInterface; импортировать android.content.res.ColorStateList; импортировать android.graphics.Color; импортировать android.text.TextUtils; импортировать android.view.LayoutInflater; импортировать android.view.View; импортировать android.view.ViewGroup; импортировать android.widget.BaseAdapter; импортировать android.widget.Button; импортировать android.widget.TextView; импортировать com.example.dao.ComputerRoomStatus; импортировать com.example.dialog.CustomDialogOrder; импортировать com.example.fragmentmytest.R; импортировать com.example.utils.ToastUtils; import com.handmark.pulltorefresh.library.PullToRefreshListView; public class MyAdapter extends BaseAdapter { private Context context; private List<ComputerRoomStatus> data; private LayoutInflater layoutInflater; private String room; private ViewHolder holder = null; private PullToRefreshListView mPullRefreshListView; public MyAdapter(Context context, List<ComputerRoomStatus> data, String room, PullToRefreshListView mPullRefreshListView) { this.context = context; this.data = data; this.room = room; this.mPullRefreshListView = mPullRefreshListView; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { holder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.lv_item, null); holder.seatId = (TextView) convertView.findViewById(R.id.seatId); holder.time1 = (Button) convertView.findViewById(R.id.time1); holder.time2 = (Button) convertView.findViewById(R.id.time2); holder.time3 = (Button) convertView.findViewById(R.id.time3); holder.time4 = (Button) convertView.findViewById(R.id.time4); holder.time5 = (Button) convertView.findViewById(R.id.time5); holder.time6 = (Button) convertView.findViewById(R.id.time6); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // Получение объекта класса сущности из коллекции final ComputerRoomStatus s = data.get(position); holder.seatId.setText(s.getId() + ""); holder.time1.setOnClickListener(new lvButtonListener(position)); holder.time2.setOnClickListener(new lvButtonListener(position)); holder.time3.setOnClickListener(new lvButtonListener(position)); holder.time4.setOnClickListener(new lvButtonListener(position)); holder.time5.setOnClickListener(new lvButtonListener(position)); holder.time6.setOnClickListener(new lvButtonListener(position)); // Пропущена часть, которая не важна...... return convertView; } class lvButtonListener implements View.OnClickListener { private int position; lvButtonListener(int pos) { position = pos; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.time1: showDialog(position, "1"); break; case R.id.time2: showDialog(position, "2"); break; case R.id.time3: showDialog(position, "3"); break; case R.id.time4: showDialog(position, "4"); break; case R.id.time5: showDialog(position, "5"); break; case R.id.time6: showDialog(position, "6"); break; default: break; } } } public void showDialog(final int id, final String witch) { final CustomDialogOrder.Builder builder = new CustomDialogOrder.Builder; context); builder.setTitle("Запись на машинное обучение"); builder.setPositiveButton("Запись", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); // При отправке передавать application's room, position и witch ToastUtils.MyToast(context, room + ":" + id + ":" + witch); //TODO Соединить строки GET для доступа к указанному интерфейсу //TODO И также обновить выполнение прокрутки вниз mPullRefreshListView.setRefreshing(true); } }); builder.setNegativeButton("Отмена", new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builder.create().show(); } } класс ViewHolder { Текст View seatId; Кнопка time1, time2, time3, time4, time5, time6; }
Указанные выше знания о простом примере кода для имитации эффекта обновления Android, подобного今日头条, предоставлены редактором给大家. Надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставляйте комментарии, редактор ответит вам своевременно. Вновь благодарю всех за поддержку сайта呐喊 учебник!
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, самостоятельно загружен, сайт не имеет права собственности, не был отредактирован вручную и не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @), чтобы сообщить о нарушении,并提供 соответствующие доказательства. Если будет установлено, что содержимое нарушает права на интеллектуальную собственность, сайт немедленно удалят.