2016-10-21 6 views
-3

私のアプリでは、私のサーバーからいくつかのデータを取得します。彼らは罰金が表示されますが、私は私の詳細なフラグメントに渡す際に、すべてのビューがヌル:(ある。私のビューは私にnullポインタ例外を与えています

をだからここに私のコードです。

public class MainActivityFragment extends Fragment { 
    public static final String TAG = "AelApp"; 
    public static ArrayList<MyModel> listItemsList; 
    RecyclerView myList; 
    public static MatchReportsAdapter adapter; 

public MainActivityFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    updateMatchReport(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    getActivity().setTitle("Match Report"); 

    View rootView = inflater.inflate(R.layout.fragment_main_activity, container, false); 
    listItemsList = new ArrayList<>(); 

    myList = (RecyclerView)rootView.findViewById(R.id.listview_match_reports); 
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); 
    myList.setHasFixedSize(true); 
    myList.setLayoutManager(linearLayoutManager); 
    adapter = new MatchReportsAdapter(getActivity(), listItemsList); 
    myList.setAdapter(adapter); 

    return rootView; 
} 

public void updateMatchReport(){ 
    Intent i = new Intent(getActivity(), MatchReport.class); 
    getActivity().startService(i); 
} 

} 

アダプタ

public class MatchReportsAdapter extends 
RecyclerView.Adapter<MatchReportsAdapter.RowHolder>{ 
private List<MyModel> reportsList; 
private Context mContext; 
private ImageLoader mImageLoader; 
private int focused = 0; 

public MatchReportsAdapter(Activity activity, List<MyModel> reportsLists){ 
    this.reportsList = reportsLists; 
    this.mContext=activity; 
} 

@Override 
public RowHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_items,null); 

    final RowHolder holder = new RowHolder(v); 
    return holder; 
} 

@Override 
public void onBindViewHolder(RowHolder holder, int position) { 
    final MyModel listItems = reportsList.get(position); 
    holder.itemView.setSelected(focused==position); 

    holder.getLayoutPosition(); 

    mImageLoader = AppController.getInstance().getImageLoader(); 

    holder.thumbnail.setImageUrl(listItems.getImage(),mImageLoader); 
    holder.thumbnail.setDefaultImageResId(R.drawable.reddit_placeholder); 

    holder.name.setText(Html.fromHtml(listItems.getTitle())); 

    holder.relativeLayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String article = listItems.getArticle(); 
      String image = listItems.getImage(); 
      Intent i = new Intent(mContext, DetailedActivity.class); 

      i.putExtra("articleKey",article); 
      i.putExtra("imageKey",image); 
      mContext.startActivity(i); 
     } 
    }); 
} 

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

public class RowHolder extends RecyclerView.ViewHolder{ 
    protected NetworkImageView thumbnail; 
    protected TextView name; 

    protected RelativeLayout relativeLayout; 
    public RowHolder(View itemView) { 
     super(itemView); 

     this.relativeLayout = (RelativeLayout)  
    itemView.findViewById(R.id.recLayout); 
     this.thumbnail = 
    (NetworkImageView)itemView.findViewById(R.id.thumbnail); 
     this.name = (TextView)itemView.findViewById(R.id.title); 

    } 

    } 
} 

詳細なアクティビティ

public class DetailedActivity extends AppCompatActivity { 

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

    if(savedInstanceState == null){ 
     getSupportFragmentManager() 
       .beginTransaction() 
       .add(R.id.detailed_match_reports,new DetailedActivityFragment()) 
       .commit(); 
    } 
    } 
} 

DetailedActivityFragment

public class DetailedActivityFragment extends Fragment { 
TextView articleTextView; 
String image; 
String article; 
ImageView imageView; 

public DetailedActivityFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_detailed_activity, container, false); 

    articleTextView = (TextView)getActivity().findViewById(R.id.articleTextView); 

    imageView = (ImageView)getActivity().findViewById(R.id.imageNews); 

    Intent i = getActivity().getIntent(); 

    article = i.getStringExtra("articleKey"); 
    image = i.getStringExtra("imageKey"); 

    Picasso.with(getActivity()).load(image).into(imageView); 

    articleTextView.setText(article); 


    return v; 
} 

} 

私のデータのすべてが良いの行をクリックした後に渡されます。私は次の行をデバッグする際にこれを知っています。

article = i.getStringExtra("articleKey"); 
    image = i.getStringExtra("imageKey"); 

両方の文字列変数がnullでないことを確認してください。しかし、私の詳細なフラグメントの両方のビュー(TextView、ImageView)はnullです。

おそらく私はxmlファイルに何か問題がありますが、私はそれを見ません。

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/match_reports" 
tools:context="theo.testing.androidservices.fragments.MainActivityFragment"> 

</FrameLayout> 

fragment_main_activity

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/recLayout" 
tools:context=".activities.MainActivity" 
android:background="#fff"> 

<android.support.v7.widget.RecyclerView 

    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/listview_match_reports" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentLeft="true" 
    /> 

</RelativeLayout> 

activity_detailed.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/detailed_match_reports" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="theo.testing.androidservices.activities.DetailedActivity" 
tools:ignore="MergeRootFrame"> 
</FrameLayout> 

、最後に

fragment_detailed_activity

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/imageNews" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView 
     android:layout_gravity="center_horizontal" 
     android:padding="10dp" 
     android:text="xcvxcvxcv" 
     android:textColor="#000" 
     android:layout_marginTop="5dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/articleTextView"/> 
</ScrollView> 

私は何をしないのですか?

ありがとう

Theo。

+0

問題をより簡単に特定できるようにエラーログを追加してください。 – MohanadMohie

+0

[NullPointerExceptionとは何か、それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) – Soham

答えて

1

変更これら

articleTextView = (TextView)getActivity().findViewById(R.id.articleTextView); 
imageView = (ImageView)getActivity().findViewById(R.id.imageNews); 

articleTextView = (TextView)v.findViewById(R.id.articleTextView); 
imageView = (ImageView)v.findViewById(R.id.imageNews); 

にYou'rはDetailActivityにデータを渡します。最初にDetailActivityで取得してからDetailFragmentに渡してください。

また、あなたのTextView articleTextViewがフラグメントであるが、あなたはactivitys XMLでそれを見つけているsetArguments(bundle)

+0

ありがとうございました。 – Theo

1

Bundleを使用してDetailFragmentにデータを渡す必要があります:あなたがやるべき

articleTextView = (TextView)getActivity().findViewById(R.id.articleTextView); 

insetad:

articleTextView = (TextView)(v.findViewById(R.id.articleTextView)); 

Imageviewlも同じです。

+0

ありがとうございます。 – Theo

関連する問題