2009-06-18 9 views
8

Hai quelqu'un s'il vous plaît dites-moi est-il possible de créer un DataGrid dans android, si oui signifie s'il vous plaît aidez-moi avec des extraits de code, ou de donner des URLs connexes.Comment créer un affichage DataGrid dans Android?

+0

Pourriez-vous préciser ce que vous entendez par DataGrid? – emmby

+1

c'est une question gimme-teh-codez, essayez d'écrire le code d'abord après tout ce que vous êtes payé pour cela, .. et puis si vous avez des problèmes, demandez-les ici. – Reno

+0

Voici un composant Android DataGrid: http://www.androidjetpack.com/Home/AndroidDataGrid – user2453876

Répondre

9

Book.java

package com.dgrid; 

public class Book { 
    String title; 
    String author; 

    public Book(String title, String author) { 
     this.title = title; 
     this.author = author; 
    } 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
    public String getAuthor() { 
     return author; 
    } 
    public void setAuthor(String author) { 
     this.author = author; 
    } 

} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@+id/bookListView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:divider="#ffffff" 
    /> 
</AbsoluteLayout> 

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
android:id="@+id/widget0" 
android:orientation="horizontal" 
android:layout_toRightOf="@android:id/icon" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#ffffff" 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
<com.dgrid.ListItemView 
android:id="@+id/title" 
android:layout_height="wrap_content" 
android:layout_width="150px" 
android:text="Title" 
android:textSize="10sp" 
android:textStyle="bold" 
android:textColor="#ff000000" 
/> 

ListItemView.java

package com.dgrid; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class ListItemView extends TextView { 
    private boolean isHeader = false; 
    private Paint linePaint; 

    public ListItemView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public ListItemView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public ListItemView(Context context) { 
     super(context); 
     init(); 
    } 

    public void init(){ 
     linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     linePaint.setColor(Color.parseColor("#000000")); 
    } 
    public boolean isHeader() { 
     return isHeader; 
    } 

    public void setHeader(boolean isHeader) { 
     this.isHeader = isHeader; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if(isHeader){ 
      canvas.drawColor(Color.parseColor("#AAFFFF99")); 
     } 
     canvas.drawLine(0, 0, getMeasuredWidth(), 0,linePaint); 
     canvas.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(),linePaint); 
     canvas.drawLine(0,0, 0, getMeasuredHeight(),linePaint); 
    } 
} 

DatagridActivity.java

package com.dgrid; 



import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class DatagridActivity extends Activity { 
    Context mContext; 
    Book[] books = {new Book("Title","Author"),new Book("Clean Code","Uncle Bob"),new Book("Face 2.0","Allen Cooper")}; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mContext = this; 
     setContentView(R.layout.main); 
     ListView bookListView =(ListView)findViewById(R.id.bookListView); 
     LitemItemAdapter mcqListAdapter = new LitemItemAdapter(this,R.layout.row,books); 
     bookListView.setAdapter(mcqListAdapter); 
    } 
    class LitemItemAdapter extends ArrayAdapter<Book>{ 

     public LitemItemAdapter(Context context, int textViewResourceId, 
       Book[] objects) { 
      super(context, textViewResourceId, objects); 
     } 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      if (v == null) { 

       LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.row, null); 
      } 
      Book item = books[position]; 
      if (item != null) { 
        ListItemView titleView = (ListItemView) v.findViewById(R.id.title); 
        ListItemView authorView = (ListItemView) v.findViewById(R.id.author); 
        if(position == 0){ 
         titleView.setHeader(true); 
         authorView.setHeader(true); 
        } 
        if(titleView != null){ 
         titleView.setText(item.getTitle()); 
        } 
        if(authorView != null){ 
         authorView.setText(item.getAuthor()); 
        } 
      } 
      return v; 
     }  

    } 
} 
+0

N'avez pas essayé ce code mais je pense que vous pourriez faire sans widget0 pour envelopper le textview. Le titre est également codé en dur à 150px? Que se passe-t-il si c'est un long titre pour une ligne, ça ne ressemblera plus à un DataGrid, non? –

Questions connexes