2017-09-04 20 views
2

タイトルによれば、私はRecyclerViewとCardViewに問題があります。 開発プロセス中に、RecyclerView上にダークフレームが表示され、どこにも定義されていません。どのように私はそれを取り除くことができますどのようなアドバイス?RecyclerView奇妙な背景色

CardViewには2つのtextViewとMapViewがあります。

SingleRunは2つの文字列を持つ単純なオブジェクトです。

MainActivity

MainActivity 

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.d(TAG, "Main Activity onCreate"); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     RecyclerView rv = (RecyclerView) findViewById(R.id.recycler_view); 
     rv.setLayoutManager(new LinearLayoutManager(this)); 
     rv.setAdapter(new SingleRunsAdapter(new SingleRunProvider().readData(), getApplicationContext())); 

CardViewRecyclerViewItem

CardViewRecyclerViewItem 


public class CardViewRecyclerViewItem extends CardView { 

protected MapView mapView; 
protected TextView distance; 
protected TextView time; 

public CardViewRecyclerViewItem(Context context) { 
    this(context, null); 
} 

public CardViewRecyclerViewItem(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    View view = LayoutInflater.from(getContext()).inflate(R.layout.card_view_single_run, this); 
    mapView = (MapView) view.findViewById(R.id.single_run_map_mapview); 
    distance = (TextView) view.findViewById(R.id.details_distance_textview); 
    time = (TextView) view.findViewById(R.id.details_time_textview); 
} 

public void cardViewOnCreate(Bundle savedInstanceState) { 
    if (mapView != null) { 
     mapView.onCreate(savedInstanceState); 
    } 
} 
public void cardViewOnResume() { 
    if (mapView != null) { 
     mapView.onResume(); 
    } 
}} 

CardViewHolder

public class CardViewHolder extends RecyclerView.ViewHolder { 

private CardViewRecyclerViewItem mCardViewRecyclerViewItem; 

public CardViewHolder(CardViewRecyclerViewItem cardViewRecyclerViewItem) { 
    super(cardViewRecyclerViewItem); 
    mCardViewRecyclerViewItem = cardViewRecyclerViewItem; 
} 

public void cardViewRecyclerViewItemOnResume() { 
    if (mCardViewRecyclerViewItem != null) { 
     mCardViewRecyclerViewItem.cardViewOnResume(); 
    } 
}} 

SingleRunAdapter

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

Context context; 

private final List<SingleRun> singleRuns; 

public SingleRunsAdapter(List<SingleRun> singleRuns, Context context) { 
    this.singleRuns = singleRuns; 
    this.context = context; 
} 


@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    CardViewRecyclerViewItem cardViewRecyclerViewItem = new CardViewRecyclerViewItem(context); 
    cardViewRecyclerViewItem.cardViewOnCreate(null); 
    return new CardViewHolder(cardViewRecyclerViewItem); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) { 
    CardViewHolder cardViewHolder = (CardViewHolder) viewHolder; 
    cardViewHolder.cardViewRecyclerViewItemOnResume(); 
} 

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

activity_main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.coderspeak.lightweightrunningtracker.single_run.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

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

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

content_main.xml 


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:context="com.coderspeak.lightweightrunningtracker.single_run.MainActivity" 
     tools:showIn="@layout/activity_main"> 


     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:layout_editor_absoluteX="8dp" 
      tools:layout_editor_absoluteY="8dp" /> 

    </LinearLayout> 

card_view_single_run.xmlそれがどのように見えるか

<android.support.v7.widget.CardView xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/main_card_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:layout_margin="8dp"> 

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

     <com.google.android.gms.maps.MapView xmlns:map="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/single_run_map_mapview" 
      android:layout_width="match_parent" 
      android:layout_height="144dp" 
      map:liteMode="true" 
      map:mapType="normal" 
      tools:context=".MapsActivity" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:orientation="horizontal" 
      android:layout_margin="8dp"> 

      <TextView 
       android:id="@+id/single_run_time" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:text="00:12:34" 
       android:textAlignment="center" /> 

      <TextView 
       android:id="@+id/single_run_distance" 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:text="3.14km" 
       android:textAlignment="center" /> 
     </LinearLayout> 

    </LinearLayout> 

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

RecyclerView with strange background color

あなたはcard_view_single_run.xmlとのMapViewライン内のコンテンツとの両方LinearLayoutsコメントする場合はCardViewRecyclerViewItemに次のように表示されます:

THIS

でも、空のカードならば、リサイクル業者はいくつかの背景を持っているので、これは、私の意見では、より奇妙です。

ありがとうございました。必要に応じて、より多くのコードを提供することができます。

+0

は、RecyclerView、CardView、Mのようなすべてのライブラリの最新バージョンを使用します。 apView。 –

+0

より具体的で、人々の手伝いを手助けするためには、[最小限で完全であり、かつ検証可能な例を作る方法](https://stackoverflow.com/help/mcve)を見てください。 –

+0

@Murli 私はすでに最新バージョンのライブラリを使用しています。 –

答えて

0

getApplicationContext(からあなたのMainActivity 変更コンテキストで、次の

を試してみてください)へMainActivity.this

RecyclerView rv = (RecyclerView) findViewById(R.id.recycler_view); 
    rv.setLayoutManager(new LinearLayoutManager(this)); 
    rv.setAdapter(new SingleRunsAdapter(new SingleRunProvider().readData(), MainAcitivity.this)); 
+0

ありがとう、私のために働いた:) –

+0

問題は間違ったコンテキストを使用していた!ありがとうございました! –

0

IMOエラーのこの種を診断するための最良の方法は、Android Studioでレイアウトインスペクタツールを使用している:

Layout Inspector in Search Everywhere

+0

残念ながら、そこに何も私に何かヒントはありません。 CardViewRecyclerViewItemをポイントします。 –