2012-11-30 22 views
0

我已经创建了自定义ArrayList,它正在工作,因为它应该禁止onClick的问题。当初用户点击该行时,我首先使ArrayList突出显示红色的选定行。不过,我还需要在ArrayAdapter类之外的那个点击位置。自定义ArrayAdapter onClick位置和行高亮

我似乎可以做到这一点的唯一方法是添加一个onClickListener,但是这是问题开始,虽然这解决了我获得用户点击位置的问题,突出显示的行现在似乎被覆盖。

所以基本上我的问题是让被突出了选择行和位置将被传递到一个ArrayAdapter类的变量外,请看我下面的代码:

阵列适配器类别:

public class Shop extends ListActivity 
{ 
    private static class MyAdapter extends ArrayAdapter<String> 
    { 
     private ArrayList<String> data1, data2, data3, data4; 

     public MyAdapter(Context context, int resource, int textViewResourceId, ArrayList<String> data1, ArrayList<String> data2, ArrayList<String> data3, ArrayList<String> data4) 
     { 
      super(context, resource, textViewResourceId, data1); 
      this.data1 = data1; 
      this.data2 = data2; 
      this.data3 = data3; 
      this.data4 = data4; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) 
     { 
      View v = super.getView(position, convertView, parent); 
      TextView t1 = (TextView) v.findViewById(R.id.data1); 
      t1.setText(data1.get(position)); 
      TextView t2 = (TextView) v.findViewById(R.id.data2); 
      t2.setText(data2.get(position)); 
      TextView t3 = (TextView) v.findViewById(R.id.data3); 
      t3.setText(data3.get(position)); 
      TextView t4 = (TextView) v.findViewById(R.id.data4); 
      t4.setText(data4.get(position)); 
      spnCharacters.setVisibility(View.GONE); 

      Iterator<Integer> iterator = unavailableItem.iterator(); 
      while (iterator.hasNext()) 
      { 
       int NotAvailable = iterator.next(); 
       if(position == NotAvailable) 
       { 
        v.setBackgroundColor(Color.rgb(170, 170, 170)); 
       } 
      } 
      if(unavailableItem.size() == 1) 
      { 
       if(position == unavailableItem.get(0)) 
       { 
        v.setBackgroundColor(Color.rgb(170, 170, 170)); 
       } 
      } 
      if (position == 0) 
      { 
       v.setBackgroundResource(android.R.drawable.title_bar); 
      } 

      v.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        currentPositon = position; 
        if(data2.get(currentPositon).equals("0")) 
        { 
         btnSell.setEnabled(false); 
        } 
        else 
        { 
         btnSell.setEnabled(true); 
        } 
       } 
      }); 

      return v; 
     } 
    } 

    private void NeedPosition() 
    { 
     int position = // need ArrayAdapter exact position here 
    } 
} 

ArrayAdapter 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="horizontal" > 

    <TextView 
     android:id="@+id/data1" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="5dp" 
     android:layout_weight="1.5" 
     android:gravity="center_horizontal" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/data2" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="5dp" 
     android:layout_weight="0.5" 
     android:gravity="center_horizontal" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/data3" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="5dp" 
     android:layout_weight="0.5" 
     android:gravity="center_horizontal" 
     android:textColor="#FFFFFF" /> 

    <TextView 
     android:id="@+id/data4" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_margin="5dp" 
     android:layout_weight="0.5" 
     android:gravity="center_horizontal" 
     android:textColor="#FFFFFF" /> 

</LinearLayout> 

列表查看XML:

<ListView 
    android:id="@android:id/list" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/linearButtons" 
    android:layout_above="@+id/linerBuyBtns" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp" 
    android:listSelector="@drawable/list_selector"> 
</ListView> 
+0

为什么不在你的listview上使用OnItemClickListener? – njzk2

+0

我试过使用OnItemClickListener,但遇到了使onClick触发的问题。 –

+0

这可能是你应该看的地方。添加onclicklistener到您的所有项目是不是一个好的解决方案 – njzk2

回答

0

ListActvity有它自己的方式来管理小区点击。

protected void onListItemClick (ListView l, View v, int position, long id) 

当您点击ListView的一行时,将调用此方法。正如你所看到的第二放慢参数是position你需要

+0

正是我所寻找的曾尝试使用OnItemClickListener以前没有被解雇。谢谢。 –

0

试试这个...

@Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{  
    onClick(...) 
    {  
     convertView.parent().setSelection(position); <--- 
    } 
} 
0

我有自定义列表视图和阵列适配器,类似的问题..

对我来说android:listSelector没有正常工作,所以我使用android:Background代替 其中i定义状态选择,突出显示等....最后,为了达到某些视觉效果,我不得不使用两者的组合,可能不是最好的解决方案,但完美的作品。