2016-11-22 97 views
0

我的列表視圖的應用程序中獲取數據,並從自定義適配器ListAdapter.class ItemView控件的背景色。我還需要設置以下listview一個textview當前選擇的列表項的值,但在MAinActivitysetOnItemClickListener不executing.pls幫助。setOnItemClickListener不工作

這是我的列表視圖的應用程序:

Layout image

MainActivity.java

public class MainActivity extends Activity { 
private static ListAdapterclass adapter; 
    ListView lv; 
    TextView tv2; 
    private final String android_versions[]={ 
      "Donut", 
      "Eclair", 
      "Froyo", 
      "Gingerbread", 
      "Honeycomb", 
      "Ice Cream Sandwich", 
      "Jelly Bean", 
      "KitKat", 
      "Lollipop", 
      "Marshmallow" 
    }; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initViews(); 
    } 
    private void initViews() { 
     lv = (ListView) findViewById(R.id.listView1); 
     tv2 = (TextView) findViewById(R.id.selected); 

     adapter = new ListAdapterclass(getApplicationContext(), android_versions); 
     lv.setAdapter(adapter); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Toast.makeText(getApplicationContext(), "hiiiiiiiii", Toast.LENGTH_SHORT).show(); 
       System.out.println("********************** INSIDE ONITEMCLICKLISTNER IN MAIN ACTIVITY ******************"); 
       String ver_name = (lv.getItemAtPosition(i)).toString(); 


       tv2 = (TextView) findViewById(R.id.selected); 
       tv2.setText(ver_name); 
      } 
     }); 
    } 
} 

ListAdapter.class

public class ListAdapterclass extends ArrayAdapter implements AdapterView.OnItemClickListener{ 

    private String android_versionNames[]; 
    Context mContext; 
    public int row_index=-1; 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View v, int i, long l) { 
     int position=(Integer)v.getTag(); 
     String ver_name=getItem(position).toString(); 
    } 

    private static class ViewHolder{ 
     TextView tv; 
     LinearLayout LL; 
     TextView tv2; 
    } 



    public ListAdapterclass(Context context,String android_versionnames[]) { 
     super(context, R.layout.list_item,android_versionnames); 
     this.android_versionNames=android_versionnames; 
     this.mContext=context; 

     System.out.println(" ???????????????????????? Inside dataadapter,Android names : ?????????????????????????????\n "); 
     for(int i=0;i<android_versionnames.length;i++){ 
      System.out.println("\n"+android_versionnames[i]); 
     } 

    } 
    private int lastPosition=-1; 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     String ver_name=getItem(position).toString(); 

     final ViewHolder viewHolder; 
     final View result; 

     if(convertView==null){ 
      viewHolder=new ViewHolder(); 
      LayoutInflater inflater=LayoutInflater.from(getContext()); 
      convertView=inflater.inflate(R.layout.list_item,parent,false); 
      viewHolder.tv=(TextView)convertView.findViewById(R.id.label); 
      viewHolder.LL=(LinearLayout) convertView.findViewById(R.id.linearLayout_1); 
      viewHolder.tv2=(TextView)convertView.findViewById(R.id.selected); 
      result=convertView; 
      convertView.setTag(viewHolder); 
     }else{ 
      viewHolder=(ViewHolder) convertView.getTag(); 
      result=convertView; 
     } 
     lastPosition=position; 

     viewHolder.tv.setText(ver_name); 

     viewHolder.LL.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       row_index=position; 
       notifyDataSetChanged(); 
      } 
     }); 
     if(row_index==position){ 
      viewHolder.LL.setBackgroundColor(Color.parseColor("#409de1")); 
      viewHolder.tv.setTextColor(Color.parseColor("#ffffff")); 
     } 
     else 
     { 
      viewHolder.LL.setBackgroundColor(Color.parseColor("#ffffff")); 
      viewHolder.tv.setTextColor(Color.parseColor("#000000")); 

     } 
     return convertView; 
    } 
} 

ActivityMain.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
android:orientation="vertical" 
    tools:context="com.cybraum.test.listviewcolorchange.MainActivity" 
    > 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
android:clickable="true" 
    android:layout_weight="1" 
    > 
<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/listView1" 
    > 
</ListView> 


</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight=".2" 
    android:id="@+id/linearLayout_2" 
    android:orientation="horizontal" 

    > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Selected : " 
     android:textStyle="bold" 
     android:layout_gravity="center"/> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textStyle="bold" 
     android:text="text" 
     android:id="@+id/selected" 
     android:layout_gravity="center"/> 

</LinearLayout> 

</LinearLayout> 

listitem.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:id="@+id/linearLayout_1" 
    android:padding="10dp"> 
<TextView 
    android:id="@+id/label" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dip" 
    android:textSize="16dip" 
    android:textStyle="bold" 
    android:textColor="#000000" 
    android:gravity="center"> 
</TextView> 
</LinearLayout> 

是什麼問題?

+0

發表您的適配器項目的XML –

+0

在日誌中發生什麼,而你單擊一個項目。在日誌中打印任何東西 –

+1

在您的適配器中刪除viewHolder.LL.setOnClickListener,然後檢查是否需要onItemClickListener? –

回答

0

你的方法從適配器和 刪除viewHolder.LL.setOnClickListener聽者您的適配器添加一個方法來更新row_index:

public void changeIndex(int rowIndex){ 
this.row_index = rowIndex; 
notifyDataSetChanged(); 
} 

呼叫從onItemClickListener情況下,本方法:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
adapter.changeIndex(i);//This will give you the same result of viewHolder.LL.setOnClickListener as you are doing 
       //Do whatever you are doing previously 
      } 
     }); 
+0

謝謝男人......它的工作。 – c0der

0

用途:

lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Toast.makeText(getApplicationContext(), "hiiiiiiiii", Toast.LENGTH_SHORT).show(); 
       System.out.println("********************** INSIDE ONITEMCLICKLISTNER IN MAIN ACTIVITY ******************"); 
       String ver_name = (lv.getItemAtPosition(i)).toString(); 


       tv2 = (TextView) findViewById(R.id.selected); 
       tv2.setText(ver_name); 
      } 
     }); 

而且從適配器刪除

工具AdapterView.OnItemClickListener

+0

查看上面的答案可能對你,因爲我們可以採取克里克通風口和itemclick從Listview – Vadivel

+0

我試過..但它沒有工作.. – c0der

1

如果你從適配器單擊事件,然後ListView中如果需要適配器,點擊事件和ListView itemClick在不能工作項目請點擊鏈接, How to make imageView clickable from OnItemClickListener?

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    long viewId = view.getId(); 

    if (viewId == R.id.button1) { 
     Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT).show(); 
    } else if (viewId == R.id.button2) { 
     Toast.makeText(this, "Button 2 clicked", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "ListView clicked" + id, Toast.LENGTH_SHORT).show(); 
    } 
} 

在適配器:

viewHolder.Btn.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 
((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick() 
} 
0

您需要從setOnClickListner() 嘗試刪除適配器更改與

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
    Object o = prestListView.getItemAtPosition(position); 
    prestationEco str=(prestationEco)o;//As you are using Default String Adapter 
    Toast.makeText(getBaseContext(),str.getTitle(),Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

它顯示刪除適配器的錯誤 – c0der

+0

你在哪裏得到錯誤 –

0

變化的ListView XML

<ListView 

     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusable="true"> 

</ListView> 

刪除適配器視圖。OnItemClickListener從適配器類

公共類ListAdapterclass擴展ArrayAdapter {

}

0

變化的ListView XML

<ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusable="true"></ListView> 

刪除AdapterView.OnItemClickListener從適配器類

個公共類ListAdapterclass擴展ArrayAdapter {

}

相關問題