2012-07-23 57 views
-2

我想要为Android创建自定义GridView,该列表总是在第一列中包含文本并为其他图片保留其他格式。例如:创建一个自定义GridView,其中包含第一列中的文本和其他图像

Text Text Text 
Text Image Image 
Text Image Image 
Text Image Image 
Text Image Image 
    ..... 
    ..... 
Text Image Image 

我不知道这是否可行。如果可能的话,我应该如何实施它?

+0

你已经尝试过了,还是你希望有人给你完整的代码?如果GridView不起作用,则在以后的API版本中有GridLayout。 – wyoskibum 2012-07-23 02:32:20

+0

我刚刚与网格一起工作,因此我在互联网上看到很多示例,只是展示了从布局中充气每个项目的自定义gridview。所以我为什么要问这个问题有一些想法。不要告诉我,我知道没有人会给我写一个完整的代码。 – vhong 2012-07-23 03:01:56

+0

我可以问,为什么在这个问题上编辑了这个问题,彻底改变了问题的范围?我的答案现在甚至不适用,到目前为止它看起来完全错误。最初被问到的东西还剩下什么?有人问及如何创建一个具有特定布局的自定义GridView .... – 2012-07-23 04:59:47

回答

1

很有可能。你只需要考虑你想要做什么,在哪里应用,然后将代码添加到适当的区域。

例如:

第1步:找出/知道有多少列 要么得到多少列你GridView目前在通过适当的成员函数调用运行时(GridView.getNumColumns - 注意,您必须> = API级别11使用此调用)。否则GridView.setNumColumns将需要在设置中完成。最后一个选项是确定列数应该是多少,并将其设置为onMeasure或类似的Overrides

第2步:写下您getView代码 在您为您选择的适配器getView代码,你应该能够做简单的数学搞清楚该怎么做。例如:

public View getView(int position, View convertView, ViewGroup parent) { 
    // Either have numOfColumns saved as a global variable or get it here depending on your method 

    // Create your view for the item 
    View ret; 

    if (position < numOfColumns || position % numOfColumns == 0) { 
     // Aka if first row OR if first column 
     TextView tv = new TextView(mContext); 

     // Do all your textview formatting etc etc.... 

     ret = tv; 
    } else { 
     ImageView iv = new ImageView(mContext); 

     // Do all your imageview layout stuff etc etc.... 

     ret = iv; 
    } 

    return ret; 
} 

注:这是纯粹的只是你的头脑风暴/想大声为你做,让你开始。您错过了一些内容(如果您的GridView将滚动,则可以使用不同类型的Views回收视图进行优化)。您也可以考虑创建一个自定义布局,并将其作为您的视图并根据需要使用上面的选择代码进行修改。

所以回答你的问题,是的这是可能的。

+0

感谢一个伟大的想法对我来说,我会尝试这个,但正如我看到它从你的解释似乎工作得很好。 – vhong 2012-07-23 03:02:49

0

请参阅本教程自定义网格视图

http://www.mkyong.com/android/android-gridview-example/

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

     gridView.setAdapter(new ImageAdapter(this, MOBILE_OS)); 

     gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 
       Toast.makeText(
        getApplicationContext(), 
        ((TextView) v.findViewById(R.id.grid_item_label)) 
        .getText(), Toast.LENGTH_SHORT).show(); 

      } 
     }); 




public class ImageAdapter extends BaseAdapter { 
private Context context; 
private final String[] mobileValues; 

public ImageAdapter(Context context, String[] mobileValues) { 
    this.context = context; 
    this.mobileValues = mobileValues; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View gridView; 

    if (convertView == null) { 

     gridView = new View(context); 

     // get layout from mobile.xml 
     gridView = inflater.inflate(R.layout.mobile, null); 

     // set value into textview 
     TextView textView = (TextView) gridView 
       .findViewById(R.id.grid_item_label); 
     textView.setText(mobileValues[position]); 

     // set image based on selected text 
     ImageView imageView = (ImageView) gridView 
       .findViewById(R.id.grid_item_image); 

     String mobile = mobileValues[position]; 

     if (mobile.equals("Windows")) { 
      imageView.setImageResource(R.drawable.windows_logo); 
     } else if (mobile.equals("iOS")) { 
      imageView.setImageResource(R.drawable.ios_logo); 
     } else if (mobile.equals("Blackberry")) { 
      imageView.setImageResource(R.drawable.blackberry_logo); 
     } else { 
      imageView.setImageResource(R.drawable.android_logo); 
     } 

    } else { 
     gridView = (View) convertView; 
    } 

    return gridView; 
} 

@Override 
public int getCount() { 
    return mobileValues.length; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

} 
相关问题