2015-03-24 8 views
1

Я новичок в разработке Android и довольно новичок в кодировании в целом, и я пытаюсь сделать так, что, когда я нажму на одну из своих карт, на нем появится тост. Разная для каждой карты. Я везде искал и ничего не работает.Как добавить прослушиватель кликов в CardView?

Это одна из моих карточек. Все мои карты содержатся в RelativeLayout

<FrameLayout 
     android:id="@+id/frame_orange" 
     android:layout_width="fill_parent" 
     android:layout_height="200dp" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/ripple" 
     android:foreground="?android:attr/selectableItemBackground"> 

     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_width="118dp" 
      android:layout_height="123dp" 
      android:layout_gravity="center" 
      android:scaleType="fitXY" 
      android:src="@drawable/pi" /> 

    </FrameLayout> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal|bottom" 
     android:paddingBottom="10dp" 
     android:text="Definition" 
     android:textColor="@android:color/black" 
     android:textSize="25dp" /> 
</android.support.v7.widget.CardView> 

Это мой, что я добавил к моему MainActivity.java

public static class PlaceHolderFragment extends Fragment implements View.OnClickListener{ 

View rootView; 

public PlaceHolderFragment(){ 

} 

public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.activity_main, container, false); 
    return rootView; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) 
    { 
     case R.id.card_definition: 
      Toast.makeText(getActivity().getApplication(), "Test", 
        Toast.LENGTH_LONG).show(); 
    } 
} 
} 

Я не уверен, если я делаю это совершенно неправильно но я был бы признателен за помощь.

Edit: полнота моего MainActivity.java

package com.piplex.kylefoster.piplex; 


import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.support.v7.widget.CardView; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 


public class MainActivity extends Activity { 

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

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


public static class PlaceHolderFragment extends Fragment { 

    View rootView; 

    public PlaceHolderFragment() { 

    } 

    public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.activity_main, container, false); 
     CardView cardView = (CardView) findViewById(R.id.card_definition); 

     cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity().getApplication(), "Test", 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 
     return rootView; 

    } 
} 
} 
+1

вы должны надуть вид, а затем 'view.setOnClickListener () ' – Soheil

+0

@Soheil, где я должен помещать код для раздувания моего представления? –

+0

это зависит от вашего дизайна, но, очевидно, как только вы хотите, чтобы ваш вид был видимым, вы должны раздуть его и дать ему onClickListener – Soheil

ответ

1

Вы легко можете сделать это с добавлением этого кода public View OnCreateView:

CardView cardView = (CardView) findViewById(R.id.card_view); 

    cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //write your function here. 
     } 
    }); 
+0

Я получаю эту ошибку: Ошибка: (60, 44) ошибка: нестатическая метод findViewById (int) не может ссылаться из статического контекста –

+0

- это ваш OnCreateView, помеченный как статический? - потому что этого не должно быть. Можете ли вы разместить больше кода, пожалуйста/ – conor

+0

Я только что добавил весь свой код выше. OnCreateView помечен как статический. Когда я пытаюсь удалить статику, я получаю сообщение об ошибке, которое должно быть статическим. –

Смежные вопросы