Android QQ 개인 태그 추가 및 삭제 기능 모방
탭 단 추 를 누 르 면 탭 이 선택 한 페이지 를 팝 업 하고 모든 탭 을 표시 합 니 다.모든 탭 에 있 는 item 을 누 르 면 선택 한 탭 이 위 에 표 시 됩 니 다.같은 탭 을 다시 클릭 하여 추가 하면'탭 이 존재 합 니 다.다시 추가 하 십시오'를 알려 줍 니 다.위 에서 선택 한 탭 을 클릭 하여 삭제 작업 을 진행 합 니 다.
업무 논 리 는 바로 이렇다.다음은 구체 적 인 실현 과정 이다.
1.인터페이스 레이아웃:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="@dimen/label_hei" >
<GridView
android:id="@+id/label_check_gv"
style="@style/w_h_full"
android:layout_margin="@dimen/margin"
android:horizontalSpacing="@dimen/margin"
android:numColumns="4"
android:scrollbars="none"
android:stretchMode="columnWidth"
android:verticalSpacing="@dimen/margin" >
</GridView>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="@dimen/activity_bar"
android:background="@color/gray_bg" >
<TextView
style="@style/w_wrap_h_wrap"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/margin"
android:text="@string/all_label" />
</LinearLayout>
<GridView
android:id="@+id/label_gv"
style="@style/w_h_full"
android:layout_margin="@dimen/margin"
android:horizontalSpacing="@dimen/margin"
android:numColumns="4"
android:scrollbars="none"
android:stretchMode="columnWidth"
android:verticalSpacing="@dimen/margin" >
</GridView>
관건 적 인 레이아웃 은 바로 두 개의 Gridview 입 니 다.그 중에서 속성 은 ID,높이,너비,거리,수평 거리,열 수,스크롤 바 를 숨 기 고 크기 조정 과 열 너비 크기 가 동기 화 되 며 수직 거리 입 니 다.item 의 레이아웃 은 textview 입 니 다.배경 은 사용자 정의 테두리 입 니 다.2.Gridview 어댑터:
public class FragLabelGridViewAdapter extends BaseAdapter {
class ViewHolder {
@ViewInject(R.id.gv_label_txt)
public TextView label;
}
private Context context;
private LayoutInflater inflater;
private List<String> labels;
public FragLabelGridViewAdapter(List<String> labels, Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
this.labels = labels;
}
@Override
public int getCount() {
return labels.size();
}
@Override
public Object getItem(int position) {
return (position);
}
@Override
public long getItemId(int id) {
// TODO Auto-generated method stub
return id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.gv_item_label, null);
viewHolder = new ViewHolder();
ViewUtils.inject(viewHolder, convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.label.setText(labels.get(position));
return convertView;
}
}
핵심 은 viewHolder 를 사용 하여 Gridview 를 최적화 하 는 것 입 니 다.원 리 는 convertView 의 재 활용 입 니 다.convertView 대상 을 처음 만 들 었 을 때 item 의 하위 View 컨트롤 대상 을 예화 하여 ViewHolder 대상 에 저장 합 니 다.그리고 convertView 의 setTag 로 viewHolder 대상 을 Tag 에 설정 합 니 다.나중에 ListView 의 item 을 다시 불 러 올 때 Tag 에서 ViewHolder 대상 을 직접 꺼 낼 수 있 습 니 다.매번 item 의 하위 컨트롤 대상 을 가 져 올 필요 가 없습니다.이렇게 복용 의 목적 을 달성 하여 성능 을 크게 향상 시 켰 다.3.메 인 인터페이스의 코드:
public class FragmentLabel extends Fragment {
@ViewInject(R.id.label_gv)
GridView labelGridview;
@ViewInject(R.id.label_check_gv)
GridView labelCheckGridview;
private Context context;
private FragLabelGridViewAdapter adapter;
private FragLabelCheckGridViewAdapter checkAdapter;
//
private List<String> labels = new ArrayList<String>();
//
private List<String> checkLabels = new ArrayList<String>();
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_label, container, false);
ViewUtils.inject(this, view);
context = getActivity().getApplicationContext();
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
initviews();
}
우선 주 해 를 통 해 구성 요소 의 성명 을 진행 합 니 다.효 과 는 findviewbyid()와 같 습 니 다.그 다음 에 두 개의 Gridview 어댑터 의 성명 입 니 다.그 다음은 Gridview 의 데 이 터 를 모 의 해서 조작 하 는 것 입 니 다.
private void initviews() {
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
labels.add(" ");
adapter = new FragLabelGridViewAdapter(labels, context);
labelGridview.setAdapter(adapter);
labelGridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
for (int i = 0; i < checkLabels.size(); i++) {
if (labels.get(position) == checkLabels.get(i)) {
UiUtil.showToast(context,
getResources().getString(R.string.label_toast));
return;
}
}
checkLabels.add(labels.get(position));
refresh();
}
});
checkAdapter = new FragLabelCheckGridViewAdapter(checkLabels, context);
labelCheckGridview.setAdapter(checkAdapter);
labelCheckGridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
checkLabels.remove(position);
refresh();
}
});
}
private void refresh() {
checkAdapter.setLabels(checkLabels);
checkAdapter.notifyDataSetChanged();
}
}
우선 list 집합 에 데 이 터 를 추가 합 니 다.여 기 는 모두 아 날로 그 데이터 이 고 실제 상황 데 이 터 는 서버 에서 가 져 옵 니 다.구조 방법 을 통 해 두 개의 매개 변 수 를 전달 하여 어댑터 를 예화 시 키 고 Gridview 에 어댑터 를 연결 합 니 다.아래 Gridview 의 item 바 인 딩 모니터 에 추가 작업 을 처리 합 니 다.이벤트 에서 탭 의 유일 성 을 판단 하려 면 먼저 Gridview 의 list 집합 을 누 르 십시오.item 을 누 른 값 과 같 으 면'탭 존재'를 알려 주 고 탭 이 존재 하지 않 으 면 위 에 있 는 Gridview 의 list 에 데 이 터 를 추가 합 니 다.마지막 으로 refresh 방법 을 실행 하여 adapter 에 데 이 터 를 전달 한 다음 notify DataSetChanged()방법 을 호출 합 니 다.이렇게 선택 한 탭 은 자동 으로 위 에 나타 나 고 새로 고침 작업 이 필요 없습니다.
위의 Gridview 의 item 바 인 딩 모니터 에 삭제 작업 을 처리 하고 list 의 reove(position)방법 을 호출 합 니 다.삭제 방법 이 실 행 된 후에 새로 고침 방법 을 호출 합 니 다.마지막 으로 실행 되 는 효 과 는 처음 그림 과 같 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.