【问题标题】:How to add gridview setOnItemClickListener如何添加gridview setOnItemClickListener
【发布时间】:2013-11-25 11:27:01
【问题描述】:

我有一个 GridView,上面有 81 个按钮。我想将 clicklistener 添加到此 gridview 但它不可用。我添加了 OnItemClickListener 但它不起作用,我不明白为什么。代码没有错误。唯一不起作用的是 OnItemClickListener。

我的 gridview 孩子上面有一个按钮(gridview_members.xml);

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

<Button
    android:id="@+id/city"
    android:layout_width="183dp"
    android:layout_height="90dp"
    android:textSize="19sp"
    android:textStyle="bold"
    android:text="Code\n\nCity"
    android:gravity="center"
    android:background="@drawable/city_btn_tablet" />

</RelativeLayout>

我的 ImageAdapter 类;

public class ImageAdapter extends BaseAdapter {
private Context mContext;

public ImageAdapter(Context c) {
    mContext = c;
}

public int getCount() {
    return 81;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

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

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View gridView;

    gridView =new View(mContext);

    gridView = inflater.inflate(R.layout.gridview_members, null);

    Button city = (Button) gridView.findViewById(R.id.city);

    return gridView;
}

}

activity_main.xml 上的 Gridview 实现;

<GridView
android:id="@+id/gridview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:horizontalSpacing="5dp"
android:verticalSpacing="5dp"
android:gravity="center"
android:stretchMode="columnWidth"
android:numColumns="6" >
</GridView>

最后是我的 MainActivity.java 文件;

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

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

    gridview.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });
}
}

【问题讨论】:

标签: android android-gridview


【解决方案1】:

GridView 是可点击的,无需在 GridView 中放置按钮。

要将侦听器添加到网格,请添加以下代码:

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

        switch (position) {
            case 0: 
                break;
            case 1:
                break;

        }
    }
}); 

以此类推,您可以添加案例中的所有数字。

【讨论】:

    【解决方案2】:

    您要求单击项目(而不是项目内的按钮),因此需要更改您的子 XML 布局

    来自

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    
    <Button
        android:id="@+id/city"
        android:layout_width="183dp"
        android:layout_height="90dp"
        android:textSize="19sp"
        android:textStyle="bold"
        android:text="Code\n\nCity"
        android:gravity="center"
        android:background="@drawable/city_btn_tablet" />
    
    </RelativeLayout>
    

    <?xml version="1.0" encoding="utf-8"?>
    <Button
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/city"
        android:layout_width="183dp"
        android:layout_height="90dp"
        android:textSize="19sp"
        android:clickable="true"
        android:textStyle="bold"
        android:text="Code\n\nCity"
        android:gravity="center"
        android:background="@drawable/city_btn_tablet" />
    

    或者你可以在适配器中添加 ClickListener

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
        View gridView;
    
        gridView =new View(mContext);
    
        gridView = inflater.inflate(R.layout.gridview_members, null);
    
        Button city = (Button) gridView.findViewById(R.id.city);
    
                    city.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
        //Toast here
    
            }});
    
        return gridView;
    }
    

    【讨论】:

    • 你是对的。将 OnClickListener 添加到适配器类更有用。
    • 不是本页的正确答案,请参阅below answer
    【解决方案3】:

    如果你想获得点击项目的文本,你可以使用这个

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    String item = ((TextView)view.findViewById(R.id.ID_OF_TEXTVIEW)).getText().toString();
                    Toast.makeText(showMissions.this, "" + item, Toast.LENGTH_SHORT).show();
    
                }
            });
    

    【讨论】:

      【解决方案4】:

      我建议您在 getview 方法中添加点击侦听器,而不是在活动类中添加。 试试这个代码

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
      
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      
      View gridView;
      
      gridView =new View(mContext);
      
      gridView = inflater.inflate(R.layout.gridview_members, null);
      
      Button city = (Button) gridView.findViewById(R.id.city);
      
      city.setOnClickListener(new OnClickListener() {
      
          @Override
          public void onClick(View arg0) {
              // TODO Auto-generated method stub
                  //Do your task here
              }
          });
          return gridView;
      }
      

      【讨论】:

        【解决方案5】:

        在你的CustomAdapter中放入

         onBindViewHolder(...
        {
          yourViewHolder.gridview.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                //Do Something
               }
            });
        

        }

        【讨论】:

          【解决方案6】:

          您可以通过这种方式将点击监听器添加到 Kotlin 中的网格视图项中

          grdlyt_merchant_color_code.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
                      loyaltyColor = parent.getItemAtPosition(position) as LoyaltyColor?
                      colorCode= LoyaltyUtils.getLoyaltyColorById(loyaltyColor!!.colorId).colorCode
                      val color = ContextCompat.getColor(requireContext(), colorCode!!)
                      shape.setColor(color)
                      loyalty_card_img.background = shape
                      uncheckAllColors()
                      loyalty_card_img.visibility = View.GONE
                      loyaltyColor!!.isColorSelected = true
          
                      mAdapter.notifyDataSetChanged()
                  }
          
          

          【讨论】:

            【解决方案7】:

            重新编写你的适配器,这将工作测试

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                
                LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
                View gridView = inflater.inflate(R.layout.gridview_members,null);  
              
                YOUR_CUSTOM_OBJECT obj = yOUR_CUSTOM_OBJECT.get(position);
            
                Button city = (Button) gridView.findViewById(R.id.city);
                city.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // Your Code
                        Toast.makeText(c, "Hlw There " + obj.SOME_GET_FUNCTION(), Toast.LENGTH_LONG).show();
                    }
                });
                return gridView;
            }
            

            您的网格视图代码将是这样的:

            <GridView
                android:id="@+id/gridData"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/bluegradient"
                android:stretchMode="columnWidth" />
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-06-15
              • 1970-01-01
              • 2014-05-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多