android listview焦点争端补充(侧滑添加和删除)

来源:互联网 发布:音乐可视化软件 编辑:程序博客网 时间:2024/04/30 08:37

前一段时间说明了listview争端的具体来源,主要就事件的分发和传递机制问题。当listview条目中涉及到多个Button及子类的控件时,发现按钮和listview的点击事件失控不响应了。由于上段时间说了事件的处理机制,现在就来用代码来实现相应的效果吧。

效果:侧滑,添加,删除,测试打印信息

条目布局文件:listview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <HorizontalScrollView
        android:id="@+id/horizontalScrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scrollbars="none" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <RelativeLayout
                android:id="@+id/root"
                android:layout_width="385dp"
                android:layout_height="match_parent" >

                <TextView
                    android:id="@+id/textView1"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_alignBottom="@+id/button1"
                    android:layout_alignParentLeft="true"
                    android:layout_marginLeft="20dp"
                    android:gravity="center"
                    android:text="TextView" />

                <Button
                    android:id="@+id/button1"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:text="@string/join" />
            </RelativeLayout>

            <Button
                android:id="@+id/button2"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="@string/unmount" />

            <Button
                android:id="@+id/button3"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:text="@string/test" />
          
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

主界面布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

</RelativeLayout>

自定义adapter:

package com.example.new_until;
import java.util.List;

import com.example.test.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class Extra_adpter extends BaseAdapter {
 private Context context;
 private List<String> data = null;
 private LayoutInflater inflater;
 private View v;
 private Button queren;
 private Button shanchu;
 private Button test;
 private TextView tv;
 private RelativeLayout root;
 private int position;
 private int Count = 23;

 public Extra_adpter(Context context, List<String> data) {
  this.context = context;
  this.data = data;
 }

 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return data.size();
 }

 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return data.get(position);
 }

 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return position;
 }

 @SuppressLint({ "ViewHolder", "InflateParams" })
 @Override
 public View getView(int position, View view, ViewGroup parent) {
  // TODO Auto-generated method stub
  MyListener mListener = new MyListener(position);
  inflater = (LayoutInflater) context
    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  v = inflater.inflate(R.layout.listview_item, null);
  tv = (TextView) v.findViewById(R.id.textView1);
  queren = (Button) v.findViewById(R.id.button1);
  shanchu = (Button) v.findViewById(R.id.button2);
  root=(RelativeLayout) v.findViewById(R.id.root);
  test=(Button) v.findViewById(R.id.button3);
  tv.setText(Extra_adpter.this.data.get(position));
  tv.setOnClickListener(mListener);
  queren.setOnClickListener(mListener);
  shanchu.setOnClickListener(mListener);
  test.setOnClickListener(mListener);
  return v;
 }

 private class MyListener implements OnClickListener {

  public MyListener(int position) {
   Extra_adpter.this.position = position;
  }

  @Override
  public void onClick(View view) {
   // TODO Auto-generated method stub
   switch (view.getId()) {
   case R.id.button1:
    System.out
      .println("---------------------------您点击了添加项目----------------------");
    Extra_adpter.this.Count += 1;
    Extra_adpter.this.data.add("listview焦点争端测试项"
      + Extra_adpter.this.Count);
    Extra_adpter.this.notifyDataSetChanged();
    break;
   case R.id.button2:
    System.out
      .println("---------------------你选择了删除选项-------------------------------------");
    Extra_adpter.this.data.remove("listview焦点争端测试项" + position);
    Extra_adpter.this.notifyDataSetChanged();
    break;
   case R.id.textView1:
    System.out
      .println("---------------------你选择了前面的文本项-------------------------------------");
    break;
   case R.id.button3:
    System.out
      .println("-----------------------------------你点击了测试按钮选项--------------------------------------");
    break;
   default:
    break;
   }
  }

 }
}
主界面程序:

package com.example.test;


import java.util.ArrayList;
import java.util.List;

import com.example.new_until.Extra_adpter;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;


public class MainActivity extends Activity {
 private ListView lv;
 private List<String> data;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  data=new ArrayList<String>();
  lv = (ListView) findViewById(R.id.listView1);
  for(int i=0;i<24;i++){
   data.add("listview焦点争端测试项"+i);
  }
  Extra_adpter extra_adpter = new Extra_adpter(this, data);
  lv.setAdapter(extra_adpter);
 } 
}

注意:如果在HorizontalScrollView
的线性布局中定义过多的RelativeLayout或者LinearLayout等等容器类的,就会出现部分按钮等单击事件无响应。

 

0 0