2016-05-05 23 views
-1

我正在開發一個具有cardviews列表的應用程序,並且我希望每個cardview在點按時都能打開某個活動。我沒有使用任何recyclerviews或適配器,我剛剛創建了多個cardview xml文件,並將它們包含在Coordinatorlayout和collapsingtoolbarlayout的主要xml中。我試圖爲個別卡片視圖創建onClick事件,但應用程序不斷崩潰。 以下是我的main.xml代碼:如何在android中的recyclerview中添加個別cardview元素的onClick事件?

<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> 

我的一個cardviews的xml:

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



} 

}

如何我可以實現我的每個cardviews的onClick事件,而無需使用recyclerview和適配器?

回答

0

這是一個不好的做法。但是你可以設置標籤的所有卡的意見,發現他們在代碼中設置的點擊收聽:

在你的main.xml

... 

<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> 
... 

所有在您卡的佈局必須有標籤:

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

     ... 

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

比你需要找到所有茨艾倫意見標籤clickableCard:(從這裏的解決方案: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; 

}

你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

謝謝!奇蹟般有效!實際上,我必須達到最後期限,並且學習recyclerview花費了我太多的時間,所以我決定採用老式的方式。無論如何,非常感謝你! –

+0

謝謝)請評價我的答案,這是我在stackoverflow上的第一個答案:) –

相關問題