2017-06-07 11 views
0

グリッドビューアイテム内のボタンからアクティビティを開始しようとしています。つまり、ユーザーがグリッドビューアイテムをクリックすると1つの機能が実行され、グリッドビューアイテム内のボタンをクリックするとそれは別の機能を行う必要があります、私は詳細を教えてください、ここで私のgridviewの内部に設定されている私の単一のアイテムのレイアウトです。ここAndroid - OnClickグリッドビューの行内

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:foreground="?android:attr/selectableItemBackground" 
android:orientation="horizontal" 
app:cardCornerRadius="5dp" 
app:cardElevation="3dp" 
app:cardPreventCornerOverlap="false" 
app:cardUseCompatPadding="true"> 

<RelativeLayout 
    android:id="@+id/single_row" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="10dp" 
    android:paddingTop="10dp"> 

    <com.mikhaellopez.circularimageview.CircularImageView 
     android:id="@+id/imgFood" 
     android:layout_width="80dp" 
     android:layout_height="80dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     app:civ_border_color="#ffffff" 
     app:civ_border_width="2dp" 
     app:civ_shadow="true" 
     app:civ_shadow_color="#000000" 
     app:civ_shadow_radius="10" /> 

<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_toRightOf="@+id/imgFood"> 

    <TextView 
     android:id="@+id/txtName" 
     android:layout_marginLeft="5dp" 
     android:layout_marginStart="5dp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Name" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="16sp" 
     /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/currentid" 
     android:layout_marginLeft="5dp" 
     android:layout_marginStart="5dp" 
     android:layout_below="@+id/txtName" 
     android:text="Current ID : " 
     android:visibility="visible" 
     /> 

    <TextView 
     android:id="@+id/studentid" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ID" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textSize="16sp" 
     android:layout_below="@+id/txtName" 
     android:layout_toRightOf="@+id/currentid" 
     android:layout_marginEnd="30dp" 
     android:layout_marginRight="30dp" 
     /> 

    </RelativeLayout> 

    <Button 
     android:layout_width="30dp" 
     android:layout_height="30dp" 
     android:layout_gravity="end" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:id="@+id/editit" 
     android:background="@android:drawable/btn_dialog"/> 


</RelativeLayout> 


上記のレイアウトがどのように見えるかです:

here is a image of the above layout


、ここでは、私が意図/アクションを実行しようと、そこから私のアダプタgetviewですから;

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 

    View row = view; 
    ViewHolder holder = new ViewHolder(); 


    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(layout, null); 

     holder.txtName = (TextView) row.findViewById(R.id.txtName); 
     holder.txtPrice = (TextView) row.findViewById(R.id.studentid); 
     holder.imageView = (CircularImageView) row.findViewById(R.id.imgFood); 
     holder.dit = (Button) row.findViewById(R.id.editit); 

     final ViewHolder finalHolder = holder; 
     holder.dit.setOnClickListener(new View.OnClickListener() { 

      String getname = finalHolder.txtName.getText().toString(); 
      String gethandicap = finalHolder.txtPrice.getText().toString(); 

      @Override 
      public void onClick(View v) { 
       // Do something 
       Intent editintent = new Intent(context, MainActivity.class); 
       editintent.putExtra("studentname", getname); 
       editintent.putExtra("studentid", getID); 
       context.startActivity(editintent); 
      } 
     }); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    Sudentdb student = studentsList.get(position); 

    holder.txtName.setText(student.getName()); 
    holder.txtPrice.setText(student.getID()); 


    if (student.getImage() != null && student.getImage().length > 0) { 
     Glide.with(context) 
       .load(student.getImage()) 
       .into(holder.imageView); 
    } else { 
     holder.imageView.setImageBitmap(null); 
    } 

    return row; 

} 

私がいる問題は、GridViewの項目内のボタンは、それが唯一のACTION_DOWNを言うと私はアイテムもonclickの項目内のボタンを追加したので、動作しないログに、任意のアクションを実行されていないということです。


EDIT; GridViewのONCLICKとレイアウトを追加

gridView = (GridView) findViewById(R.id.gridView); 
    list = new ArrayList<>(); 
    adapter = new StudentListAdapter(this, R.layout.food_items, list); 
    gridView.setAdapter(adapter); 

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      String dataFromGrid; 
      dataFromGrid = ((TextView)(view.findViewById(R.id.txtName))).getText().toString(); 


      Intent i = new Intent(getApplicationContext(), Student.class); 

      i.putExtra("unfromstudent",dataFromGrid); 
      startActivity(i); 

GridViewのレイアウト(私はフォーカス可能とクリッカブル試してみました)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:focusable="true" 
    > 

    <GridView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:focusable="true" 
     android:id="@+id/gridView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:columnWidth="120dp" 
     android:gravity="center" 
     android:layout_margin="2dp" 
     android:numColumns="1" 

     /> 

</RelativeLayout> 

答えて

1

あなたXMLが、私は GridView

xmlその作品の罰金の下にテストした変更
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:foreground="?android:attr/selectableItemBackground" 
    android:orientation="horizontal" 
    app:cardCornerRadius="5dp" 
    app:cardElevation="3dp" 
    app:cardPreventCornerOverlap="false" 
    app:cardUseCompatPadding="true"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     android:orientation="horizontal"> 


     <com.mikhaellopez.circularimageview.CircularImageView 
      android:id="@+id/imgFood" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_margin="10dp" 
      app:civ_border_color="#ffffff" 
      app:civ_border_width="2dp" 
      app:civ_shadow="true" 
      app:civ_shadow_color="#000000" 
      app:civ_shadow_radius="10" /> 


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal|center_vertical" 
      android:layout_weight="1" 
      android:gravity="center_horizontal|center_vertical" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/txtName" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="5dp" 
       android:layout_marginStart="5dp" 
       android:text="Name" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:textSize="16sp" /> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal"> 

       <TextView 
        android:id="@+id/currentid" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_below="@+id/txtName" 
        android:layout_marginLeft="5dp" 
        android:layout_marginStart="5dp" 
        android:text="Current ID : " 
        android:visibility="visible" /> 

       <TextView 
        android:id="@+id/studentid" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_below="@+id/txtName" 
        android:layout_marginEnd="30dp" 
        android:layout_marginRight="30dp" 
        android:layout_toRightOf="@+id/currentid" 
        android:text="ID" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:textSize="16sp" /> 
      </LinearLayout> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="30dp" 
      android:layout_height="30dp"> 

      <Button 
       android:id="@+id/editit" 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="end" 
       android:background="@android:drawable/btn_dialog" 
       android:focusable="false" /> 


     </LinearLayout> 

    </LinearLayout> 


</android.support.v7.widget.CardView> 

グリッドビューのXMLはこのようになります。私はあなたの質問にコメントすることはできませんので

<GridView 
     android:id="@+id/grid" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:focusable="true"> 

    </GridView> 
+0

これはアイテムの内側ボタンのonclickのを修正したが、今のonclickアイテム自体の動作しません。 –

+0

あなたは私のgridviewの中にアイテム/カードビューである上記を投稿しました。その中にボタンがあります。ボタンをクリックすると、新しいアクティビティが開きます。それは動作します。しかし、アイテム/カードビュー自体のクリックイベントではなく、カードビュー内のボタンではなく、カードビュー自体が機能しません。 –

+0

まだ動作していませんが、まだカードビューを取得していません。 –

0

私は十分な評判を持っていない、なぜあなたはgridLayoutManagerとrecyclerviewを使用していませんか?基本的な例はhereです。

あなたはrecyclerviewアダプタこの方法を実装することが可能にした後

public class StudentsAdapter extends RecyclerView.Adapter<StudentsAdapter.ViewHolder> { 

private final OnStudentItemClickListener mListener; 
private Context mContext; 
private List<Student> mStudents; 

public StudentsAdapter(Context context, List<Student> items, OnStudentItemClickListener listener) { 
    mContext = context; 
    mStudents =items; 
    mListener = listener; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_item_student, parent, false); 
    return new ViewHolder(view); 
} 

@Override 
public void onBindViewHolder(final ViewHolder holder, int position) { 
    Student student = mStudents.get(position); 

    holder.mTextName.setText(student.getName()); 
    holder.mTextPrice.setText(student.getID()); 

    if (student.getImage() != null && student.getImage().length > 0) { 
     Glide.with(context) 
       .load(student.getImage()) 
       .into(holder.imageView); 
    } else { 
     holder.imageView.setImageBitmap(null); 
    } 
} 

@Override 
public int getItemCount() { 
    return mStudents.size(); 
} 


public interface OnStudentItemClickListener { 
    void onStudentItemClick(Student student); 
    void onStudentButtonClick(Student student); 
} 

public class ViewHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener { 
    TextView mTextName; 
    TextView mTextPrice; 
    CircleImageView mImageView; 
    Button mDit; 

    public ViewHolder(View view) { 
     super(view); 

     mTextName = (TextView) view.findViewById(R.id.txtName); 
     mTextPrice = (TextView) view.findViewById(R.id.studentid); 
     mImageView = (CircleImageView) view.findViewById(R.id.imgFood); 
     mDit = (Button) view.findViewById(R.id.editit); 
     mDit.setOnClickListener(view1 -> { 
      if (null != mListener) { 
       mListener.onStudentButtonClick(mStudents.get(getAdapterPosition())); 
      } 
     }); 
     itemView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 
     if (null != mListener) { 
      mListener.onStudentItemClick(mStudents.get(getAdapterPosition())); 
     } 
    } 
} 

}

関連する問題