English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android에서 간단한 갱신 효과 예제 코드(투데이뉴스 모방)

버튼을 클릭하면, 먼저 자동으로下拉刷新을 수행하고, 수동으로도 새로고침할 수 있습니다. 새로고침이 끝나면, 마지막에 한 줄 더 데이터가 추가됩니다. 네 가지 탭이 있습니다.

지난 두일 전에 지도교수님이本科생들이 실습실 좌석을 예약할 앱을 만들라고 요청했습니다. 이곳에서 출발했습니다. 하면서도 많은 문제를 만났고, 모두 해결했습니다. 이 효과는 꽤 좋습니다. 정리해보겠습니다.

MainActivity

package com.example.fragmentmytest;
import android.content.DialogInterface;
import 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;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import com.example.dialog.CustomDialog;
import com.example.dialog.CustomDialogChangePwd;
import com.example.dialog.CustomDialogSignUp;
import com.example.myapplication.CustomApplication;
import 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 객체를 얻습니다
// getSupportFragmentManager()를 사용하려면 FragmentActivity를 상속받아야 합니다. 가장 좋은 방법은 v4.app을 사용하는 사람이 거의 없습니다
fragementManager = getSupportFragmentManager();
init();
// 처음 실행할 때 0번 탭을 선택합니다
setTabSelection(0);// 불가능하게 슬라이드할 수 없는 기본값
}
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 hideFragements(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;
import 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;
import android.view.LayoutInflater;
import android.view.View;
import 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;
import com.example.dao.ComputerRoomStatus;
import 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) {
}
return "" + (mItemCount++);
}
@Override
protected 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

package com.example.adapter;
import java.util.List;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import com.example.dao.ComputerRoomStatus;
import com.example.dialog.CustomDialogOrder;
import com.example.fragmentmytest.R;
import 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的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();
}
}
class ViewHolder {
TextView seatId;
Button time1, time2, time3, time4, time5, time6;
}

위에서 소개한 Android 뉴스 타임라인을 모방한 간단한 리프레시 효과 예제 코드와 관련된 지식을 소개했습니다. 많은 도움이 되셨기를 바랍니다. 어떤 질문이나 의문이 있으시면, 댓글을 남겨주시면 좋겠습니다. 저는 즉시 답변을 드리겠습니다. 또한, 나아라 교본 사이트에 대한 지지에 감사드립니다!

언급: 본 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 본 사이트에 소유되지 않으며, 인터넷 사용자가 자발적으로 기여하고 자체로 업로드한 내용입니다. 본 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반이 의심되는 내용이 있으시면, 이메일을 notice#w로 발송하여 알려주시면 감사합니다.3codebox.com(이메일을 보내는 경우, #을 @으로 변경하십시오. 신고를 하고 관련 증거를 제공하시면, 해당 사이트는 즉시 위반 내용을 삭제합니다.

추천해 드립니다