2016-05-05 16 views
-1

私はカードビューのリストを持つアプリを開発しています。タップすると、各カードビューに特定のアクティビティを開くようにしたいと思います。私はrecyclerviewsまたはアダプターを使用していない、私は複数のcardview xmlファイルを作成し、それらを私のメインXMLにcoordinatorlayoutとcollapsingtoolbarlayoutに含めた。私は個々のカードビューのonClickイベントを作成しようとしましたが、アプリはクラッシュし続けます。続き 私のmain.xmlコードです:私のcardviewsのXMLの個々のcardview要素にonClickイベントを追加する方法androidのrecyclerviewにはありませんか?

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:fitsSystemWindows="true" 
      android:background="@drawable/pic3" 
      android:id="@+id/profile_id" 
      app:layout_collapseMode="parallax" /> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" /> 

    </android.support.design.widget.CollapsingToolbarLayout> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.widget.NestedScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFFFFF" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingTop="10dp"> 

     <include layout="@layout/card_layout1" /> 

     <include layout="@layout/card_layout6"/> 
     <include layout="@layout/card_layout4"/> 
     <include layout="@layout/card_layout5"/> 

    </LinearLayout> 


</android.support.v4.widget.NestedScrollView> 

ワン:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:id="@+id/thumbnail" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_alignParentTop="true" 

     android:src="@drawable/categories" 
     android:layout_marginTop="15dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp"/> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/thumbnail" 
     android:maxLines="3" 
     android:padding="8dp" 
     android:text="Categories" 
     android:textColor="@color/white" 

     android:textSize="22dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/title" 
     android:maxLines="3" 
     android:padding="8dp" 
     android:text="Embedded systems is ba jksdhkah jksadh bdkbadkwuhs hfoh dn ajbd arh fbkjasd akuhwkjd nsajkbf a dsadjna hwd nlksn ahrja snasfb kjasba sna" 
     android:textColor="@color/white" 
     android:textSize="14dp" /> 

</RelativeLayout> 

そして、私のMainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 


private CollapsingToolbarLayout collapsingToolbarLayout=null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 


    collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
    collapsingToolbarLayout.setTitle(getResources().getString(R.string.user_name)); 

    dynamicToolbarColor(); 

    toolbarTextAppearance(); 


} 



private void dynamicToolbarColor() { 

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
      R.drawable.elec); 
    Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { 
     @Override 
     public void onGenerated(Palette palette) { 
      int mutedColor = palette.getMutedColor(ContextCompat.getColor(MainActivity.this, R.color.colorPrimary)); 
      collapsingToolbarLayout.setContentScrimColor(mutedColor); 
     } 
    }); 
} 

private void toolbarTextAppearance(){ 
    collapsingToolbarLayout.setCollapsedTitleTextAppearance(R.style.collapsedbar); 
    collapsingToolbarLayout.setExpandedTitleTextAppearance(R.style.expandedappbar); 
} 

@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) { 


    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onClick(View v) { 



} 

}

どのように私はrecyclerviewとアダプタを使用せずに、私のcardviewsごとにonClickイベントを実装することができますか?

答えて

0

これは悪い習慣です。

<android.support.v7.widget.CardView 
     android:tag="clickableCard" 
     ...> 

     ... 

</android.support.v7.widget.CardView> 
:タグを持っている必要があり、すべてのあなたのカードのレイアウトに

あなたは

... 

<LinearLayout 
    android:id="@+id/cardsContainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingTop="10dp"> 

    <include layout="@layout/card_layout1" /> 

    <include layout="@layout/card_layout6"/> 
    <include layout="@layout/card_layout4"/> 
    <include layout="@layout/card_layout5"/> 
</LinearLayout> 
... 

をmain.xmlに:しかし、あなたは、リスナーをクリックし、すべてのカードビューにタグを設定するコードでそれらを見つけると設定することができます(ここから解決策:Find all views with tag?

private ArrayList<View> getViewsByTag(ViewGroup root, String tag){ 
ArrayList<View> views = new ArrayList<View>(); 
final int childCount = root.getChildCount(); 
for (int i = 0; i < childCount; i++) { 
    final View child = root.getChildAt(i); 
    if (child instanceof ViewGroup) { 
     views.addAll(getViewsByTag((ViewGroup) child, tag)); 
    } 

    final Object tagObj = child.getTag(); 
    if (tagObj != null && tagObj.equals(tag)) { 
     views.add(child); 
    } 

} 
return views; 
あなたがTHOSを持つすべてのビューが clickableCardにタグを付ける見つけるために、必要以上

あなたMainActivity.javaで

}

のonCreateメソッドの最後に以下を行う必要があります。

ArrayList<View> clickableViews = getViewsByTag(findViewById(R.id.cardsContainer), "clickableCard"); 
    for (int i = 0; i < clickableViews.size(); i++) { 
     final Integer viewIndex = i; 
     View cardView = clickableViews.get(i); 
     cardView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (viewIndex == 0) { 
        // do work with first card 
       } 
       else if (viewIndex == 1) { 
        // do work with second card 
       } 
       ... 
      } 
     }); 
    } 
+0

はあなたに感謝!魅力的な作品!実際には、締め切りを迎える必要があり、リサイクル・ビューは自分の時間を浪費していたので、昔ながらの方法で行くことに決めました。とにかく、ありがとう! –

+0

ありがとう)私の答えを評価してください、それは私の最初の答えですstackoverflow :) –

関連する問題