2013-10-28 59 views
0

我尝试在我的列表视图中实现longClick,但只在编辑文本字段中获得了longClick:如何才能通过textView获取longClick?如何将android longClick事件添加到textView而不是editText

谢谢,丹尼尔


其他详情:

  • 主要布局是 “activity_main.xml中”,并在列表视图 “listView_listData” 我把 “row.xml” 布局“RigaAdvAdapter”类;
  • 布局“row.xml”有两个字段:textView和editText;我用一个ArrayList来存储我想要在行中查看的数据(用逗号分隔 - 例如“viewTextValue,editTextValue”);
  • 我需要在每一行中获取longClick以提供更多选项;
  • 我不需要editText中的longClick,否则复制粘贴不起作用;
  • 将来我需要更多的数据,所以我会使用一个ArrayList数组;

#########################布局:activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textView1" 
    android:layout_toRightOf="@+id/textView1" 
    android:orientation="vertical" > 
    <ListView 
     android:id="@+id/listView_listData" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:descendantFocusability="beforeDescendants" 
     android:listSelector="@drawable/list_selector" 
     android:fadingEdge="none" > 
    </ListView> 
</LinearLayout> 
####### ################## LAYOUT:row.xml
<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shrinkColumns="*" android:stretchColumns="*" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TableRow 
     android:id="@+id/RelativeLayout_rowData" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/textViewField" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:padding="3dip" 
      android:layout_width="0dp" 
      android:textColor="#666666" 
      android:focusable="false" /> 

     <EditText 
      android:id="@+id/editTextField" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:inputType="text"> 
      <requestFocus /> 
     </EditText> 
    </TableRow> 
</TableLayout> 

MainActivity

public class MainActivity extends Activity 
    { 
    ArrayList<String> arrayDataSource= new ArrayList<String>(); 

    ... 
    I fill the array "arrayDataSource" with a string as "text,another text" 
    ... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ListView listView_listData =(ListView)findViewById(R.id.listView_listData); 
     listView_listData.setAdapter(new RigaAdvAdapter()); 

     listView_listData.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
      { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int pos, long arg3) 
       { 
       mostraToast("hh long click"+String.valueOf(pos)); 
       return true; 
       } 
      }); 
     } 

适配器类

public class RigaAdvAdapter extends BaseAdapter 
     { 
     @Override 
     public int getCount() {return arrayDataSource.size();} 
     @Override 
     public Object getItem(int position) {return position;} 
     @Override 
     public long getItemId(int position) {return position;} 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
      { 
      if (convertView == null) 
       { 
       LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       convertView = inflater.inflate(R.layout.row, null); 
       } 

      TextView textViewField = (TextView)convertView.findViewById(R.id.textViewField); 
      EditText editTextField = (EditText)convertView.findViewById(R.id.editTextField); 

      String StringData=arrayDataSource.get(position); 
      String[] ArrayStringData=StringData.split(",",-1); 

      String textViewField_val=ArrayStringData[0]; 
      String editTextField_val=ArrayStringData[1]; 
      textViewField.setText(textViewField_val); 
      editTextField.setText(editTextField_val); 

      return convertView; 
      } 
     } 
+0

尝试将edittext propert set设置为可点击并可聚焦为false。正如您添加了Editttext一样,它会始终获得第一个焦点和触摸事件。 – GrIsHu

回答

1

而不是设置longclick来的ListView你必须设置它TextView.In RigaAdvAdapter类,你必须添加此

textViewField.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    }); 
1

尝试设置你EDITTEXT属性设置可点击和可聚焦于假。正如您添加了Editttext一样,它会始终获得第一个焦点和触摸事件。

而要在TextView上添加Longclick事件,则必须在适配器类中实现longclick监听器。

 @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
     { 
     if (convertView == null) 
      { 
      LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.row, null); 
      } 

     TextView textViewField = (TextView)convertView.findViewById(R.id.textViewField); 
     EditText editTextField = (EditText)convertView.findViewById(R.id.editTextField); 

    textViewField.setOnLongClickListener(new OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
     // TODO Auto-generated method stub 
      return false; 
     } 
    }); 
     String StringData=arrayDataSource.get(position); 
     String[] ArrayStringData=StringData.split(",",-1); 

     String textViewField_val=ArrayStringData[0]; 
     String editTextField_val=ArrayStringData[1]; 
     textViewField.setText(textViewField_val); 
     editTextField.setText(editTextField_val); 

     return convertView; 
     } 
相关问题