2013-10-06 13 views
6

में ग्रिडव्यू के साथ एंड्रॉइड छवि एडाप्टर मेरे पास ग्रिडव्यू वाला एडाप्टर है जो एक गतिविधि के रूप में काम करता है। मैं इसे अब एक टुकड़े में रखने की कोशिश कर रहा हूं और चीजों को परिवर्तित कर रहा हूं लेकिन यह काम नहीं करता है। जब मैं अपनी गतिविधि में IconFragmentSystem को शामिल करता हूं, तो जब मैं गतिविधि खोलने का प्रयास करता हूं तो मुझे एक बल बंद हो जाता है।फ्रैगमेंट

मुझे पता है कि गतिविधि काम करता है क्योंकि मैं अन्य टुकड़ों का उपयोग कर सकता हूं और सब ठीक है इसलिए मुझे पता है कि मेरी समस्या इस फ़ाइल में है।

package com.designrifts.ultimatethemeui; 
import com.designrifts.ultimatethemeui.R; 
import android.content.Context; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.*; 

import java.util.ArrayList; 

public class IconFragmentSystem extends Fragment implements AdapterView.OnItemClickListener{ 
private static final String RESULT_OK = null; 
public Uri CONTENT_URI; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.main, container, false); 

    super.onCreate(savedInstanceState); 
    int iconSize=getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid); 
    gridview.setAdapter(new IconAdapter(this, iconSize)); 
    gridview.setOnItemClickListener(this); 
    CONTENT_URI=Uri.parse("content://"+iconsProvider.class.getCanonicalName()); 
    return view; 
} 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    String icon=adapterView.getItemAtPosition(i).toString(); 
    Intent result = new Intent(null, Uri.withAppendedPath(CONTENT_URI,icon)); 
    setResult(RESULT_OK, result); 
    finish(); 
} 
private void setResult(String resultOk, Intent result) { 
    // TODO Auto-generated method stub 

} 

private void finish() { 
    // TODO Auto-generated method stub 

} 
private class IconAdapter extends BaseAdapter{ 
    private Context mContext; 
    private int mIconSize; 
    public IconAdapter(Context mContext, int iconsize) { 
     super(); 
     this.mContext = mContext; 
     this.mIconSize = iconsize; 
     loadIcon(); 
    } 

    public IconAdapter(IconFragmentSystem iconssystem, int iconSize) { 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public int getCount() { 
     return mThumbs.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return mThumbs.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(mIconSize, mIconSize)); 
     } else { 
      imageView = (ImageView) convertView; 
     } 
     imageView.setImageResource(mThumbs.get(position)); 
     return imageView; 
    } 

    private ArrayList<Integer> mThumbs; 
    //////////////////////////////////////////////// 
    private void loadIcon() { 
     mThumbs = new ArrayList<Integer>(); 

     final Resources resources = getResources(); 
     final String packageName = getActivity().getApplication().getPackageName(); 

     addIcon(resources, packageName, R.array.systemicons); 

    } 
    private void addIcon(Resources resources, String packageName, int list) { 
     final String[] extras = resources.getStringArray(list); 
     for (String extra : extras) { 
      int res = resources.getIdentifier(extra, "drawable", packageName); 
      if (res != 0) { 
       final int thumbRes = resources.getIdentifier(extra,"drawable", packageName); 
       if (thumbRes != 0) { 
        mThumbs.add(thumbRes); 
       } 
      } 
      } 
      } 
     } 
    } 

मैं इस लागू करने के लिए अलग अलग तरीकों की कोशिश की है, लेकिन सभी नाकाम रहे हैं और मैं वास्तव में मुझे सही दिशा में इशारा करते हुए सहायता की आवश्यकता हो। एक

इस लेआउट में मेरी एक्सएमएल है

<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" >   
    <GridView 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:columnWidth="90dp" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 

    </RelativeLayout> 
+0

लॉगकाट को इसके बारे में क्या कहना है? –

+0

@ रे Stojonic जब मैं logcat चलाता है यह मुझे 'कोड' देता है 10-06 1 9: 10: 27.450: ई/एंड्रॉइड रनटाइम (10180): अंतिम अपवाद: मुख्य 10-06 19: 10: 27.450: ई/एंड्रॉइड रनटाइम (10180) : java.lang.NullPointerException 10-06 1 9: 10: 27.450: ई/एंड्रॉइड रनटाइम (10180): \t com.designrifts.ultimatethemeui.IconFragmentSystem.onCreateView (IconFragmentSystem.java:28) तो मुझे पता है कि यह ऑनक्रेट व्यू से है। मैंने उदाहरणों को देखा और एंड्रॉइड साइट को पढ़ा लेकिन कोई भाग्य नहीं मिला। –

उत्तर

9

मैं

इस मुद्दे को ठीक करने में सक्षम था मैं

GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid); 

बदल

GridView gridview = (GridView) view.findViewById(R.id.icon_grid); 

करने के लिए और मैं भी

को

 gridview.setAdapter(new IconAdapter(this, iconSize)); 

बदल

 gridview.setAdapter(new IconAdapter(getActivity(), iconSize)); 
0

GridView gridview = (GridView) getActivity().findViewById(R.id.icon_grid);

होना चाहिए

GridView gridview = (GridView) container.findViewById(R.id.icon_grid);

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.main, container, false); 

    int iconSize = getResources().getDimensionPixelSize(android.R.dimen.app_icon_size); 

    GridView gridview = (GridView) view.findViewById(R.id.icon_grid); 
    gridview.setAdapter(new IconAdapter(this, iconSize)); 
    gridview.setOnItemClickListener(this); 
    CONTENT_URI = Uri.parse("content://"+iconsProvider.class.getCanonicalName()); 
    return view; 
} 

आपका सुपर करने के लिए कॉल निकालना चाहते हैं के लिए जा रहा, वह यह है कि आप से बचे हुए गतिविधि, खंड इस एम को नहीं बुलाता है ethod।

+0

मुझे अभी भी वही त्रुटि मिली जब मैंने इसे जोड़ा। मैंने लॉगकैट को साथ ही साथ कोड के संस्करण को भी रखा है जो http://pastebin.com/ByjyURxs लॉगबैक है। यह गतिविधि https://github.com/designrifts/Ultimate_Theme_UI_Template/blob/master/src/com/designrifts/ultimatethemeui/icons.java –

+1

से वर्किंग वर्जन है, इसके अलावा सुपरक्यूव्यू – r2DoesInc

+0

में सुपर से भी कॉल न करें मैंने सुपर को हटा दिया । धन्यवाद! –

2

इस प्रयास करें ...

gridView = (GridView) rootView.findViewById(R.id.gridView); 

gridView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view,int pos, long l) { 

       // do something... 

      }    
     }); 

अधिक जानकारी देखने के लिए इस लिंक पर Android gridview in fragment adapter constructor missing

इस रूप में उपयोगी में चिह्नित करें।