-2

RecyclerView(transactions_list_view)オブジェクトの1つがactivity_main.xmlに含まれておらず、別のRecyclerView(groups_list_view)にネストされていると問題があると思います。どちらも下記に含まれています。RecyclerViewヌルポインタ例外。

エラー:

03-22 22:04:51.433 15921-15921/com.example.android.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.myapplication, PID: 15921 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.myapplication/com.example.android.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2442) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2502) at android.app.ActivityThread.access$900(ActivityThread.java:167) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1361) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5469) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:770) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference at com.example.android.myapplication.MainActivity.onCreate(MainActivity.java:37) at android.app.Activity.performCreate(Activity.java:6553) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2502)  at android.app.ActivityThread.access$900(ActivityThread.java:167)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1361)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5469)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:770)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:660) 

MainActivity.java

package com.example.android.myapplication; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 

import com.example.android.myapplication.data.GroupsContract; 
import com.example.android.myapplication.data.GroupsDbHelper; 
import com.example.android.myapplication.data.TestUtilGroups; 
import com.example.android.myapplication.data.TestUtilTransaction; 
import com.example.android.myapplication.data.TransactionsContract; 
import com.example.android.myapplication.data.TransactionsDbHelper; 

public class MainActivity extends AppCompatActivity { 

    private GroupsListAdapter mGroupsAdapter; 
    private TransactionsListAdapter mTransactionsAdapter; 

    private SQLiteDatabase mGroupsDb; 
    private SQLiteDatabase mTransactionsDb; 

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

     RecyclerView groupsRecyclerView; 
     RecyclerView transactionsRecyclerView; 

     groupsRecyclerView = (RecyclerView) this.findViewById(R.id.all_groups_list_view); 
     transactionsRecyclerView = (RecyclerView) this.findViewById(R.id.transactions_list_view); 

     groupsRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
     transactionsRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     GroupsDbHelper groupsDbHelper = new GroupsDbHelper(this); 
     TransactionsDbHelper transactionsDbHelper = new TransactionsDbHelper(this); 

     mGroupsDb = groupsDbHelper.getWritableDatabase(); 
     mTransactionsDb = transactionsDbHelper.getWritableDatabase(); 

     TestUtilGroups.insertFakeData(mGroupsDb); 
     TestUtilTransaction.insertFakeData(mTransactionsDb); 

     Cursor cursorGroups = getAllGroups(); 
     Cursor cursorTransactions = getAllTransactions(); 

     mGroupsAdapter = new GroupsListAdapter(this, cursorGroups); 
     mTransactionsAdapter = new TransactionsListAdapter(transactionsRecyclerView.getContext(), cursorTransactions); 

     groupsRecyclerView.setAdapter(mGroupsAdapter); 
     transactionsRecyclerView.setAdapter(mTransactionsAdapter); 

    } 

    private Cursor getAllGroups() { 
     return mGroupsDb.query(
       GroupsContract.GroupsEntry.TABLE_NAME, 
       null, 
       null, 
       null, 
       null, 
       null, 
       GroupsContract.GroupsEntry._ID 
     ); 
    } 

    private Cursor getAllTransactions() { 
     return mTransactionsDb.query(
       TransactionsContract.TransactionsEntry.TABLE_NAME, 
       null, 
       null, 
       null, 
       null, 
       null, 
       TransactionsContract.TransactionsEntry._ID 
     ); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 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.example.android.myapplication.MainActivity"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/all_groups_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </android.support.v7.widget.RecyclerView> 
</FrameLayout> 

TransactionsListAdapter.jav

package com.example.android.myapplication; 

import android.content.Context; 
import android.database.Cursor; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.example.android.myapplication.data.GroupsContract; 
import com.example.android.myapplication.data.TransactionsContract; 

/** 
* Created by max on 3/22/2017. 
*/ 

public class TransactionsListAdapter extends RecyclerView.Adapter<TransactionsListAdapter.TransactionsViewHolder> { 

    private Context mContext; 
    private Cursor mCursor; 

    public TransactionsListAdapter(Context context, Cursor cursor) { 
     this.mContext = context; 
     this.mCursor = cursor; 
    } 

    @Override 
    public TransactionsListAdapter.TransactionsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     LayoutInflater inflater = LayoutInflater.from(mContext); 
     View view = inflater.inflate(R.layout.transactions_list_item, parent, false); 
     return new TransactionsViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(TransactionsListAdapter.TransactionsViewHolder holder, int position) { 
     if(!mCursor.moveToPosition(position)) 
      return; 
     String transactionName = mCursor.getString(mCursor.getColumnIndex(TransactionsContract.TransactionsEntry.COLUMN_NAME)); 
     String transactionAmount = mCursor.getString(mCursor.getColumnIndex(TransactionsContract.TransactionsEntry.COLUMN_AMOUNT)); 
     String transactiongivenortaken = mCursor.getString(mCursor.getColumnIndex(TransactionsContract.TransactionsEntry.COLUMN_GIVEN_TAKEN)); 

     holder.transactionNameTextView.setText(transactionName); 
     holder.transactionAmountTextView.setText(transactionAmount); 
     holder.transactionGivenortakenTextView.setText(transactiongivenortaken); 
    } 

    @Override 
    public int getItemCount() { 
     return mCursor.getCount(); 
    } 

    class TransactionsViewHolder extends RecyclerView.ViewHolder{ 

     TextView transactionNameTextView; 
     TextView transactionAmountTextView; 
     TextView transactionGivenortakenTextView; 

     public TransactionsViewHolder(View itemView){ 
      super(itemView); 
      transactionNameTextView = (TextView) itemView.findViewById(R.id.transactions_list_name); 
      transactionAmountTextView = (TextView) itemView.findViewById(R.id.transactions_list_amount); 
      transactionGivenortakenTextView = (TextView) itemView.findViewById(R.id.transactions_list_givenortaken); 
     } 
    } 
} 

groups_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:layout_margin="16dp" 
    android:background="#fff" 
    android:elevation="4dp"> 

    <TextView 
     android:id="@+id/group_name_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="3sp" 
     android:text="Group_Name" 
     android:textSize="20sp" /> 

    <TextView 
     android:id="@+id/group_type_text_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Group_Type" 
     android:textSize="20sp" 
     android:layout_margin="3sp" 
     android:layout_alignBaseline="@id/group_name_text_view" 
     android:layout_alignBottom="@+id/view" 
     android:layout_alignParentEnd="true" 
     android:textColor="@color/secondary_text"/> 

    <View 
     android:id="@+id/view" 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:layout_marginLeft="2sp" 
     android:layout_marginRight="2sp" 
     android:background="@color/divider" 
     android:layout_alignBottom="@+id/group_name_text_view"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/transactions_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignTop="@+id/view"> 
    </android.support.v7.widget.RecyclerView> 

</RelativeLayout> 

transactions_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="3sp"> 
    <TextView 
     android:id="@+id/transactions_list_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="10sp"/> 
    <TextView 
     android:id="@+id/transactions_list_amount" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="10sp"/> 
    <TextView 
     android:id="@+id/transactions_list_givenortaken" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="10sp"/> 
</LinearLayout> 

答えて

0

ID transactions_list_viewと何もあなたのactvity_main.xmlファイルではありません

0

編集しactivity_mainファイル

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
> 
    <android.support.v7.widget.RecyclerView 
     android:id="@+id/all_groups_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </android.support.v7.widget.RecyclerView> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/transactions_list_view" 
     android:layout_marginTop="20dp" 
     android:layout_below="@+id/all_groups_list_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </android.support.v7.widget.RecyclerView> 

</RelativeLayout> 
+0

below-としてはい、私はこれがうまくいくことを知っているけど、それは私がそれを表示する方法はありません。別のレイアウトファイルにRecyclerViewが必要です。 –

関連する問題