2017-02-23 132 views
0

對不起,我的英語很差。 我現在的目的是在Snackbar中顯示一個editText和gridView文本。當用戶單擊FAB時,此小工具顯示比他可以在editText中寫入某些內容時顯示。之後,用戶應該點擊GridView中顯示的一些GridViewAdapter生成的文本。我的代碼成功顯示editView和一些靜態按鈕在這裏the code,但它無法查看gridView。在這裏我最後的代碼,請幫我找到解決如何在LayoutInflater上顯示並獲取選擇GridView使用適配器

//grid view properties 
GridView gridView; 
List<String> ItemsList; 
String selectedItem; 
TextView GridViewItems,BackSelectedItem; 
int backposition = -1; 
String[] itemsName = new String[]{ 
     "Fisika", 
     "Kimia", 
     "Biologi", 
     "Matematika", 
}; 
    private void setupUI() { 
    btnFab = (FloatingActionButton) findViewById(R.id.btnFloatingAction); 
    btnFab.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      CoordinatorLayout linearLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout); 

      final Snackbar snackbar = Snackbar.make(linearLayout, "", Snackbar.LENGTH_INDEFINITE); 
      Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView(); 

      // Inflate your custom view with an Edit Text 
      LayoutInflater objLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      final View snackView = objLayoutInflater.inflate(R.layout.custom_snac_layout, null); 
      // custom_snac_layout is your custom xml 

      final EditText txt_event = (EditText) snackView.findViewById(R.id.event_text); 
      gridView = (GridView)findViewById(R.id.grid_view); 

      ItemsList = new ArrayList<String>(Arrays.asList(itemsName)); 

      gridView.setAdapter(new GridViewAdapter(ParentActivity.this)); 

      gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
             int position, long id) { 
        // TODO Auto-generated method stub 

        selectedItem = parent.getItemAtPosition(position).toString(); 

        GridViewItems = (TextView) view; 

        GridViewItems.setBackgroundColor(Color.parseColor("#814f00")); 

        GridViewItems.setTextColor(Color.parseColor("#fdfcfa")); 

        BackSelectedItem = (TextView) gridView.getChildAt(backposition); 

        if (backposition != -1) 
        { 

         BackSelectedItem.setSelected(false); 

         BackSelectedItem.setBackgroundColor(Color.parseColor("#fbdcbb")); 

         BackSelectedItem.setTextColor(Color.parseColor("#040404")); 
        } 

        backposition = position; 

        String event = txt_event.getText().toString(); 
        Toast.makeText(ParentActivity.this, "Item selected "+ selectedItem +"Text "+event, Toast.LENGTH_LONG).show(); 

       } 
      }); 

      layout.addView(snackView, 0); 
      snackbar.show(); 

     } 
    }); 

} 
public class GridViewAdapter extends BaseAdapter { 
    Context context; 

    public GridViewAdapter(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 

     return itemsName.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 

     return itemsName[position]; 
    } 

    @Override 
    public long getItemId(int position) { 

     // TODO Auto-generated method stub 

     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     TextView text = new TextView(this.context); 

     text.setText(itemsName[position]); 

     text.setGravity(Gravity.CENTER); 

     text.setBackgroundColor(Color.parseColor("#fbdcbb")); 

     text.setTextColor(Color.parseColor("#040404")); 

     text.setLayoutParams(new GridView.LayoutParams(144, 144)); 

     return text; 

    } 

} 

這裏我custom_snac_layout.xml代碼

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<EditText 
    android:layout_marginTop="8dp" 
    android:layout_marginBottom="8dp" 
    android:layout_alignParentTop="true" 
    android:id="@+id/event_text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scrollHorizontally="false" 
    android:hint="@string/type_your_message" 
    android:inputType="textNoSuggestions" 
    android:maxLines="4" 
    android:singleLine="false" 
    android:textSize="18sp" 
    android:paddingLeft="4dp" /> 

<GridView 
    android:id="@+id/grid_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/event_text" 
    android:layout_centerHorizontal="true" 
    android:numColumns="3"/> 

在logcat的

+0

試試這個:gridView =(GridView)snackView.findViewById(R.id.grid_view); – user2025187

+0

感謝哥們,我忘了使用snackView, – fajarra

回答

0

嘗試這些代碼報告 「NullPointerException異常」這個,

gridView = (GridView)snackView.findViewById(R.id.grid_view); 
相關問題