2012-08-13 53 views
4

这里是我buttonAdapter类,我认为是准确的:的Android格和巴顿OnItemclick

package com.example.test; 

import android.content.Context; 
import android.graphics.Color; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.GridView; 

public class ButtonAdapter extends BaseAdapter { 
    private Context mContext; 
    public String [] fName = { "File 1", "File 2", "Roflcopters"}; 

    // Gets the context so it can be used later 
    public ButtonAdapter(Context c) { mContext = c; } 

    // Total number of things contained within the adapter 
    public int getCount() { return 8; } 

    // Require for structure, not really used in my code. 
    public Object getItem (int position) { return null; } 

    // Require for structure, not really used in my code. Can be used to get the id of an item in the adapter for manual control. 
    public long getItemId (int position) { return position; } 

    public View getView (int position, View convertView, ViewGroup parent){  
     Button btn;   
     if (convertView == null) {  // if it's not recycled, initialize some attributes  
      btn = new Button (mContext); 
      btn.setLayoutParams (new GridView.LayoutParams (190, 190)); 
      btn.setPadding (1, 1, 1, 1);  
     } else {   
      btn = (Button) convertView; 
     }  
     // btn.setText(filesnames[position]); 
     // filenames is an array of strings  
     //btn.setTextColor (Color.WHITE); 
     //btn.setBackgroundResource (R.drawable.sample_2); 
     //btn.setBackgroundColor (Color.BLACK);  
     btn.setHighlightColor(Color.GREEN);  
     btn.setId (position); 

     return btn; 
    } 
} 

这里是我的家课。我无法获取onItemClick来解决问题。我在做什么错在这里:

package com.example.test; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.GridView; 
import android.widget.Toast; 

public class home extends Activity implements OnItemClickListener { 

    public final static String EXTRA_MESSAGE1 = "com.example.text.MESSAGE"; 

    public void onCreate (Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     setContentView (R.layout.activity_home);  

     GridView gridview = (GridView) findViewById (R.id.gridview); 
     gridview.setAdapter (new ButtonAdapter (this));  

     /*gridview.setOnItemClickListener (new OnItemClickListener() { 
      public void onItemClick (AdapterView <?> parent, View v, int position, long id) {   
      Toast.makeText (home.this, "" + position, Toast.LENGTH_LONG).show(); 
      Intent intent = new Intent (this, alarm.class);  
      String message = "Position:" + position;    
      intent.putExtra(EXTRA_MESSAGE1, message);   
      startActivity (intent);   
      }  
     }); 
    * */  
    } 

    @Override 
    public void onItemClick (AdapterView <?> parent, View v, int position, long id) { 
     Intent intent = new Intent (this, alarm.class); 
     String message = "Position:" + position;   
     intent.putExtra(EXTRA_MESSAGE1, message);   
     startActivity (intent); 
    } 
} 

的onItemClick不工作,也不做注释的“setOnItemClickListener”时,不评论它和“onItemClick”的评论。我究竟做错了什么?

+0

你能告诉我你的用户界面看起来是什么样或你想要达到什么样的效果 – Rakshi 2012-08-13 04:09:18

回答

5

如果GridView, ListView有点击能够控制像BUtton那么onItemClick不会被解雇。
您需要在适配器的getView方法中实现Button Click listener

public View getView(int position, View convertView, ViewGroup parent) { 
    Button btn; 
    if (convertView == null) { // if it's not recycled, initialize some 
           // attributes btn = new Button (mContext); 
     btn.setLayoutParams(new GridView.LayoutParams(190, 190)); 
     btn.setPadding(1, 1, 1, 1); 
    } else { 
     btn = (Button) convertView; 
    } // btn.setText(filesnames[position]); // filenames is an array of 
     // strings //btn.setTextColor (Color.WHITE); 
    // btn.setBackgroundResource (R.drawable.sample_2); 
    // btn.setBackgroundColor (Color.BLACK); 
    btn.setHighlightColor(Color.GREEN); 
    btn.setId(position); 
    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Handle the click here 

     } 
    }); 
    return btn; 

} 
+0

现在有什么优惠?看来我的意图不能接受争论?为什么不? \t \t \t btn.setOnClickListener(新OnClickListener(){ \t \t \t @覆盖 \t公共无效的onClick(视图v){ \t // \t吐司味精= Toast.makeText(mContext,“您的位置: “+插槽,Toast.LENGTH_SHORT); \t \t // msg.setGravity(Gravity.CENTER,msg.getXOffset()/ 2,msg.getYOffset()/ 2); \t \t // msg.show(); \t \t \t \t \t意图intent =新意图(this,AnAlarm。类); \t \t String message =“Position:”+ slot; \t \t intent.putExtra(EXTRA_MESSAGE,message); \t \t mContext.startActivity(intent); \t \t}}); \t return btn; } – user1594295 2012-08-13 06:18:19

+0

哪个'参数'它不接受? '位置'使它成为'最终' – 2012-08-13 06:27:13

+0

我想现在从gridview中删除项目。 BaseAdapter.remove(位置)不起作用。 – user1594295 2012-08-14 02:48:09

0

我测试过了Set Button.onClickListener()(在API 15)将不会解决问题。

因此,GridView不会触发onItemClick,如果它包含可点击意见。

您可以使用ImageView代替Button。

-1

我有同样的问题,当我试图执行onitemclickgridview充满按钮。由于该按钮正在偷取gridview上每个空间的焦点,因此您必须提供充气按钮android:focusable="false"。但是,该按钮占据了网格中的几乎整个空间,因此您必须单击按钮的边缘以触发onitemclick回拨。我建议你可以设置onclick或使用图像并将其设计为一个按钮。

2

可以在GridView的项目父布局中加入这一行:

android:descendantFocusability="blocksDescendants" 

然后onItemClickListener.onItemClick()当你在哪个OnClickListener已经为他们单独定义子视图挖掘将不会触发。

+0

将此添加到我的网格视图单元格解决了问题。按钮和网格单元格都可单独点击。 (没有它,只是按钮是可点击的。) – dwsolberg 2018-02-24 23:07:33