2013-07-01 33 views
0

我使用gridview的佈局,它不工作後的列表中的網格視圖項目,它顯示「throwIndexOutOfBoundsException」在logcat error.without onclick函數,如果我使用敬酒其工作,如果我給爲下一個活動的onlcick功能它不工作Gridview的onclick監聽器不工作

Gridviewadapter.java

public class GridviewAdapter extends BaseAdapter 
{ 
    private ArrayList<String> listginfy; 
    private ArrayList<Integer> listimage; 
    private Activity activity; 

    public GridviewAdapter(GinfyActivity ginfyActivity,ArrayList<String> listginfy, ArrayList<Integer> listimage) { 
     super(); 
     this.listginfy = listginfy; 
     this.listimage = listimage; 
     this.activity = (Activity) ginfyActivity; 
    } 

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

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

    public int getItemId() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public static class ViewHolder 
    { 
     public ImageView imgViewGinfy; 
     public TextView txtViewTitle; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder view; 
     LayoutInflater inflator = activity.getLayoutInflater(); 

     if(convertView==null) 
     { 
      view = new ViewHolder(); 
      convertView = inflator.inflate(R.layout.gridview_row, null); 

      view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1); 
      view.imgViewGinfy = (ImageView) convertView.findViewById(R.id.imageView1); 

      convertView.setTag(view); 
     } 
     else 
     { 
      view = (ViewHolder) convertView.getTag(); 
     } 

     view.txtViewTitle.setText(listginfy.get(position)); 
     view.imgViewGinfy.setImageResource(listimage.get(position)); 

     return convertView; 
    } 

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


} 

Mainactivity.java

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home_ginfy); 

     prepareList(); 

     // prepared arraylist and passed it to the Adapter class 
    mAdapter = new GridviewAdapter(this,listginfy, listimage); 

     // Set custom adapter to gridview 
     gridView = (GridView) findViewById(R.id.gridView1); 
     gridView.setAdapter(mAdapter); 

     // Implement On Item click listener 
     gridView.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 


       mAdapter = results.get(position); 

       switch(mAdapter.getItemId()) 
       { 
       case 1: 
       Intent newActivity = new Intent(GinfyActivity.this,MainActivity.class); 
       startActivity(newActivity); 
       break; 

       case 2: 
       Intent new1Activity = new Intent(GinfyActivity.this,AndroidTabLayoutActivity.class); 
       startActivity(new1Activity); 
       break; 
       default: 
        Toast.makeText(GinfyActivity.this, "Wrong Input", Toast.LENGTH_LONG).show(); 
        } 
      } 
     }); 

    } 

    public void prepareList() 
    { 
     listginfy = new ArrayList<String>(); 

     listginfy.add("Prayers"); 
     listginfy.add("Poojaroom"); 


     listimage = new ArrayList<Integer>(); 
     listimage.add(R.drawable.ginfyprayer); 
     listimage.add(R.drawable.poojaroom1); 

    } 


} 

克的ONCLICK功能idview不起作用 這裏我也發佈我的XML佈局。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/border" 
    android:padding="5dp"> 

    <ImageView 
     android:layout_height="64dp" 
     android:id="@+id/imageView1" 
     android:layout_width="64dp" 
     android:src="@drawable/icon" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:clickable="True"> 
    </ImageView> 

    <TextView 
     android:text="TextView" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_below="@+id/imageView1" 
     android:layout_marginTop="2dp" 
     android:layout_centerHorizontal="true" 
     android:textSize="18sp" 
     android:ellipsize="marquee"></TextView> 


</RelativeLayout> 

home_ginfy.xml

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

    <GridView 
     android:layout_height="wrap_content" 
     android:id="@+id/gridView1" 
     android:layout_width="match_parent" 
     android:numColumns="auto_fit" 
     android:horizontalSpacing="10dp" 
     android:verticalSpacing="10dp" 
     android:clickable="True"> 
    </GridView> 
</LinearLayout> 
+0

發佈您的logcat。 –

+0

'mAdapter = results.get(position);'?這一行沒有意義。 'mAdapter.getItemId()'這個將永遠執行'default:'case – Blackbelt

+0

你可以發佈你的xml佈局嗎? – user936414

回答

1

你有很多錯誤在你的代碼..(如android:clickable="True"在佈局>>刪除)

只是爲了測試,以替換代碼:

// Implement On Item click listener 
     gridView.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { 



      switch(position) 
      { 
      case 1: 
      Intent newActivity = new Intent(GinfyActivity.this,MainActivity.class); 
      startActivity(newActivity); 
      break; 

      case 2: 
      Intent new1Activity = new Intent(GinfyActivity.this,AndroidTabLayoutActivity.class); 
      startActivity(new1Activity); 
      break; 
      default: 
       Toast.makeText(GinfyActivity.this, "Wrong Input", Toast.LENGTH_LONG).show(); 
       } 
     } 
    }); 

的getItemId您的適配器總是返回0 ..

+0

,它的工作原理,但點擊第一張圖片時顯示錯誤輸入,點擊第二張圖片後打開mainacitty, –

+0

實際上我在gridview中給出了兩張圖片,我希望首先點擊它必須去主要活動的圖像,第二個圖片必須去androidtablayoutactivity,以什麼方式我可以作爲開關,它將如何按照他們的點擊花花公子@Pauland –

+0

lol ...位置從0開始索引...現在,只是將案例1替換爲案例0和案例2的案例1; – Pauland

0

更換

mAdapter = results.get(position); 

       switch(mAdapter.getItemId()) 

通過

switch(position) 
+0

沒有onclick函數不工作,它的靜態,點擊gridview之後它沒有做任何事 –

+0

花花公子它不工作 –

0

我一直在使用這樣的事情。在你的情況下,這應該工作。

public class GridviewAdapter extends BaseAdapter 
{ 
    private ArrayList<String> listginfy; 
    private ArrayList<Integer> listimage; 
    private Activity activity; 

    public GridviewAdapter(GinfyActivity ginfyActivity,ArrayList<String> listginfy, ArrayList<Integer> listimage) { 
     super(); 
     this.listginfy = listginfy; 
     this.listimage = listimage; 
     this.activity = (Activity) ginfyActivity; 
    } 

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

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

    public int getItemId() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public static class ViewHolder 
    { 
     public ImageView imgViewGinfy; 
     public TextView txtViewTitle; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder view; 
     LayoutInflater inflator = activity.getLayoutInflater(); 

     if(convertView==null) 
     { 
      view = new ViewHolder(); 
      convertView = inflator.inflate(R.layout.gridview_row, null); 

      view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1); 
      view.imgViewGinfy = (ImageView) convertView.findViewById(R.id.imageView1); 

      convertView.setTag(view); 
      convertView.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        switch (position){ 
         case 1: 
           Intent newActivity = new Intent(GinfyActivity.this,MainActivity.class); 
           startActivity(newActivity); 
           break; 
         case 2: 
           Intent new1Activity = new Intent(GinfyActivity.this,AndroidTabLayoutActivity.class); 
           startActivity(new1Activity); 
           break; 
         default: 
           Toast.makeText(GinfyActivity.this, "Wrong Input", Toast.LENGTH_LONG).show(); 
        } 
       } 
      } 
     } 
     else 
     { 
      view = (ViewHolder) convertView.getTag(); 
     } 

     view.txtViewTitle.setText(listginfy.get(position)); 
     view.imgViewGinfy.setImageResource(listimage.get(position)); 

     return convertView; 
    } 

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


}