【问题标题】:Problem identifying generated gridview button识别生成的gridview按钮的问题
【发布时间】:2011-05-05 01:33:35
【问题描述】:

每次我尝试根据单击的按钮显示 toast 消息时都会收到以下错误。

这是我正在使用的代码

[按钮适配器]

 public Context mContext;  

 String[] filenames = { "one", "two", "lul" };


 // 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 filenames.length;  
 }  

  // 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, initialise some attributes  
   btn = new Button(mContext);  
   btn.setLayoutParams(new GridView.LayoutParams(100, 55));  
   btn.setPadding(8, 8, 8, 8);  
   }  
  else {  
   btn = (Button) convertView;  
  }  
  btn.setText(filenames[position]);  
  // filenames is an array of strings  
  btn.setTextColor(Color.WHITE);  
  btn.setBackgroundResource(R.drawable.button);  
  btn.setId(position);  

  btn.setOnClickListener(new MyOnClickListener(position));  


  return btn;  
 }

}

这里是 onClickListener

class MyOnClickListener extends gridview implements OnClickListener {

    private final int position;

    public MyOnClickListener(int position) {
        this.position = position;
    }

    @Override
    public void onClick(View v) {
        function3(this.position);
    }

最后,我的主要活动

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

    setUpViews();

    }

public void function3(int buttonposition) {
    if (buttonposition == 1) {
        Toast.makeText(this, "test", Toast.LENGTH_SHORT);
    } else {
        Toast.makeText(this, "test", Toast.LENGTH_LONG);
    }   
}

private void setUpViews() {

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

}

这会导致以下错误

05-05 00:41:12.949: ERROR/AndroidRuntime(1570): java.lang.NullPointerException
05-05 00:41:12.949: ERROR/AndroidRuntime(1570):     at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
05-05 00:41:12.949: ERROR/AndroidRuntime(1570):     at android.widget.Toast.<init>(Toast.java:89)
05-05 00:41:12.949: ERROR/AndroidRuntime(1570):     at android.widget.Toast.makeText(Toast.java:231)
05-05 00:41:12.949: ERROR/AndroidRuntime(1570):     at com.gridview.msg.function3(msg.java:113)
05-05 00:41:12.949: ERROR/AndroidRuntime(1570):     at com.gridview.msg.MyOnClickListener.onClick(MyOnClickListener.java:21)

这已经困扰我很久了。我确定它与if (buttonposition == 1)... 声明有关,我只是没有以正确的方式或其他方式调用它。有谁知道怎么回事?

【问题讨论】:

  • 我刚刚获得了风滚草徽章。 “问了一个没有投票、没有答案、没有 cmets 和一周低视图的问题。”撞这个可以吗?

标签: android button toast


【解决方案1】:

您在makeText() 通话结束时缺少.show()Toast.makeText() 构造了 Toast 对象,但你仍然需要调用 show() 来显示它:

Toast.makeText(this, "test", Toast.LENGTH_SHORT).show();

【讨论】:

    【解决方案2】:

    将 Buttons 属性可聚焦和可点击设置为 false。因为在当前情况下,焦点和单击事件是由按钮捕获的,而不是在网格视图项上。链接.....https://stackoverflow.com/a/11752450/2476688

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2017-09-12
      • 2012-09-13
      • 2021-04-23
      相关资源
      最近更新 更多