【问题标题】:Android Gridview and Button OnItemclickAndroid Gridview 和按钮 OnItemclick
【发布时间】:2012-08-13 02:48:31
【问题描述】:

这是我认为准确的 buttonAdapter 类:

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”被注释时。我做错了什么?

【问题讨论】:

  • 你能告诉我你的用户界面是什么样子或者你想要实现什么

标签: android gridview onitemclicklistener onitemclick


【解决方案1】:

如果GridView, ListView 有像按钮这样的可点击控件,那么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;

}

【讨论】:

  • 现在怎么样了?看来我的意图不能接受论点?为什么不? btn.setOnClickListener (new OnClickListener () { @Override public void onClick (View v) { // Toast msg = Toast.makeText (mContext, "Position:" + slot, Toast.LENGTH_SHORT); // msg.setGravity(Gravity. CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2); // msg.show(); Intent intent = new Intent(this, AnAlarm.class); String message = "Position:" + slot; intent.putExtra(EXTRA_MESSAGE, message); mContext.startActivity(intent); }});返回 btn; }
  • 不接受哪个argumentposition 成功final
  • 我现在正试图从 gridview 中删除项目。 BaseAdapter.remove(位置)不起作用。
【解决方案2】:

您可以在 GridView 项目的根布局中添加此行:

android:descendantFocusability="blocksDescendants"

然后onItemClickListener.onItemClick() 不会在您点击已为它们单独定义 OnClickListener 的子视图时触发。

【讨论】:

  • 将此添加到我的网格视图单元格中解决了这个问题。按钮和网格单元都可以分别点击。 (没有它,只有按钮是可点击的。)
【解决方案3】:

我已经测试过 Set Button.onClickListener()(在 API 15 中)不能解决问题。

因此,如果 GridView 包含 可点击 视图,则不会触发 onItemClick。

您可以使用 ImageView 代替 Button。

【讨论】:

    【解决方案4】:

    当我尝试在充满按钮的gridview 上实现onitemclick 时,我遇到了同样的问题。因为按钮正在窃取gridview 上每个空间的焦点,所以你必须给膨胀按钮android:focusable="false" 。但是,该按钮几乎占据了网格内的整个空间,因此您必须单击按钮的最边缘才能触发onitemclick 回调。我建议您可以设置onclick 或使用图像并将其设计为按钮。

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 2011-09-10
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多