2013-04-08 100 views
2

我有问题设计明智。我正在寻找在listView中的一行内hortizontally显示两张图片。像这样:Listview中的布局问题

TextView 
    ImageView 
    ImageView 

我期待着看我是否可以只使用一个xml,或者我必须考虑完全使用不同的视图。我有Listview和通过baseadapter的自定义行xml。详见

代码
public class MyCustomBaseAdapter extends BaseAdapter { 


     private Integer[] imgid = { 
       R.drawable.up2, 
       R.drawable.up3, 
       R.drawable.up4, 
       R.drawable.up5, 
       R.drawable.up6, 
       R.drawable.up7, 
       R.drawable.up8, 
       R.drawable.up9, 
       R.drawable.down2, 
       R.drawable.down3, 
       R.drawable.down4, 
       R.drawable.down5, 
       R.drawable.down6, 
       R.drawable.down7, 
       R.drawable.down8, 
       R.drawable.down9 }; 


     private static ArrayList<DisplayResults> searchArrayList; 

     private LayoutInflater mInflater; 

     public MyCustomBaseAdapter(Context context, List<DisplayResults> list) { 
      searchArrayList = (ArrayList<DisplayResults>) list; 
      mInflater = LayoutInflater.from(context); 
     } 

     public int getCount() { 
      return searchArrayList.size(); 
     } 

     public Object getItem(int position) { 
      return searchArrayList.get(position); 
     } 

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

     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.list_row, null); 
       holder = new ViewHolder(); 
       //holder.txtName = (TextView)       `  

         convertView.findViewById(R.id.ServiceName); 
       holder.imgPhoto = (ImageView) convertView.findViewById(R.id.Up); 

       //holder.imgPhoto2= (ImageView) convertView.findViewById(R.id.Down); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      //holder.txtName.setText(searchArrayList.get(position).getName());  

     holder.imgPhoto.setImageResource(imgid[searchArrayList.get(position).getImageNumber()]); 
      System.out.println(searchArrayList.get(position).getImageNumber()); 
      //holder.imgPhoto2.setImageResource(imgid[searchArrayList.get(position).getImageNumber2()]); 

      return convertView; 
     } 

     static class ViewHolder { 
      TextView txtName; 
      ImageView imgPhoto; 
      //ImageView imgPhoto2; 
     } 
    } 



    public class satDataFrag extends Fragment { 

    Data datas; 

    ListView listView; 
    LayoutInflater inflaterT; 


    public satDataFrag(Data data) 
    { 
     this.datas=data; 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.sat, container, false); 
     inflaterT = inflater; 
     listView = (ListView) view.findViewById(R.id.listSat); 

     //ImageView imgView; 
     //imgView = (ImageView) view.findViewById(R.id.icon); 

     List<DisplayResults> List = new ArrayList<DisplayResults>(); 

     DisplayResults temp= new DisplayResults(); 
     for(int i=0; i<datas.features.size(); i++) 
     { 

     if(datas.features.get(i).attributes.ServiceTyp.equalsIgnoreCase("Satellite")) 
      { 
       temp.setName(datas.features.get(i).attributes.dbANAME); 

    temp.setImageNumber(upKey(datas.features.get(i).attributes.maxADUP)); 
    temp.setImageNumber2(downKey(datas.features.get(i).attributes.maxADDOWN)); 
       List.add(temp); 
      } 
     } 

     //ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(getActivity(), 
      // R.layout.list_row, List); 

     listView.setAdapter(new MyCustomBaseAdapter(getActivity(), List)); 
     return view;  

     } 

    public Integer upKey (String max) 
    { 

     if(max.equalsIgnoreCase("2")) 
     { 
      return 0; 
     } 
     else if(max.equalsIgnoreCase("3")) 
     { 
      return 1; 
     } 
     else if(max.equalsIgnoreCase("4")) 
     { 
      return 2; 
     } 
     else if(max.equalsIgnoreCase("5")) 
     { 
      return 3; 
     } 
     else if(max.equalsIgnoreCase("6")) 
     { 
      return 4; 
     } 
     else if(max.equalsIgnoreCase("7")) 
     { 
      return 5; 
     } 
     else if(max.equalsIgnoreCase("8")) 
     { 
      return 6; 
     } 
     else if(max.equalsIgnoreCase("9")) 
     { 
      return 7; 
     } 
     else 
     { 
      return 7; 
     } 

    } 

    public Integer downKey (String max) 
    { 

     if(max.equalsIgnoreCase("2")) 
     { 
      return 8; 
     } 
     else if(max.equalsIgnoreCase("3")) 
     { 
      return 9; 
     } 
     else if(max.equalsIgnoreCase("4")) 
     { 
      return 10; 
     } 
     else if(max.equalsIgnoreCase("5")) 
     { 
      return 11; 
     } 
     else if(max.equalsIgnoreCase("6")) 
     { 
      return 12; 
     } 
     else if(max.equalsIgnoreCase("7")) 
     { 
      return 13; 
     } 
     else if(max.equalsIgnoreCase("8")) 
     { 
      return 14; 
     } 
     else if(max.equalsIgnoreCase("9")) 
     { 
      return 15; 
     } 
     else 
     { 
      return 7; 
     } 
    } 

} 

custom_row.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">  

    <TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/ServiceName" 
    android:text=""/> 

    <ImageView 
     android:id="@+id/Up" 
     android:layout_gravity="left" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

    <ImageView 
     android:id="@+id/Down" 
     android:layout_gravity="left" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    </LinearLayout> 

所以我的问题是:是否有办法来显示两个图像和一个ListView内一行文字?

+0

什么是错误? – Tushar 2013-04-08 03:07:14

+0

不是一个错误,而是更多的问题。代码运行时。我只看到文字。当我从XML删除文本条目我可以看到第一张图片,当我删除第一张图片等...我需要一个足够大的行来查看所有它 – vaultzero 2013-04-08 03:57:12

+0

你能否详细说明你的问题。 – Harshid 2013-04-08 04:52:29

回答

0

这是我创建的答案!

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_gravity="left"> 

     <TextView 
      android:id="@+id/ServiceName" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:layout_gravity="left" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_gravity="left"> 

     <ImageView 
      android:id="@+id/Down" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

    </LinearLayout> 

    <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_gravity="left"> 

     <ImageView 
      android:id="@+id/Up" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

    </LinearLayout> 

</LinearLayout> 
0

正如你所提供的XML,我可以看到,TextView的ImageView的宽度为 “match_parent”。因此删除该代码并替换为以下代码。

我提供 “WRAP_CONTENT” 到TextView中。这将为渲染后的TextView提供空间。 ImageView提供了“100dp”的宽度,所以它们不会超过它,因为可能图像很大,如果我们将它们设置为“wrap_content”,它们将占据整个宽度和高度。

<?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"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/ServiceName" 
     android:text=""/> 

    <ImageView 
     android:id="@+id/Up" 
     android:layout_gravity="left" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content"/> 

    <ImageView 
     android:id="@+id/Down" 
     android:layout_gravity="left" 
     android:layout_width="100dp" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

还有可用的另一种选择, “权重”。

可以提供重量你的意见中的线性布局。

<?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"> 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:id="@+id/ServiceName" 
     android:text=""/> 

    <ImageView 
     android:id="@+id/Up" 
     android:layout_gravity="left" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content"/> 

    <ImageView 
     android:id="@+id/Down" 
     android:layout_gravity="left" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" /> 

</LinearLayout>