2015-10-18 28 views
1

下面的代碼將創建2列ListView。 是否有可能在沒有xml的情況下以編程方式創建它。Android - 以編程方式創建2列ListView

代碼:

package com.example.listviewexam; 

import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    Cursor mCursor; 
    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (mCursor != null) { 
      mCursor.close(); 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.activity_main); 
     ListView list = new ListView(this); 

     mCursor = getContentResolver().query(MediaStore.Files.getContentUri("external"), 
       FILES_PROJECTION, 
       MediaStore.Files.FileColumns.DISPLAY_NAME + "!=?", 
       new String[] {""}, 
       null); 

     ListAdapter adapter; 
     String[] from = new String[] {MediaStore.Files.FileColumns._ID, 
       MediaStore.Files.FileColumns.DATA}; 
     int[] to = new int[] {R.id.tv1,R.id.tv2}; 
     adapter = new Custom_Adapter(
       this,R.layout.activity_main, mCursor, 
       from, 
       to, 
       0); 
     list.setAdapter(adapter); 
     setContentView(list); 
    } 

    private static final String[] FILES_PROJECTION = new String[] { 
      MediaStore.Files.FileColumns._ID, 
      MediaStore.Files.FileColumns.DISPLAY_NAME, 
      MediaStore.Files.FileColumns.DATA 
    }; 

    public class Custom_Adapter extends SimpleCursorAdapter { 

     private Context mContext; 
     private Context appContext; 
     private int layout; 
     private Cursor cr; 
     private final LayoutInflater inflater; 

     public Custom_Adapter(Context context,int layout, Cursor c,String[] from,int[] to,int flags) { 
      super(context,layout,c,from,to,flags); 
      this.layout=layout; 
      this.mContext = context; 
      this.inflater=LayoutInflater.from(context); 
      this.cr=c; 
     } 

     @Override 
     public View newView (Context context, Cursor cursor, ViewGroup parent) { 
      return inflater.inflate(layout, null); 
     } 

     @Override 
     public void bindView(View view, Context context, Cursor cursor) { 
      super.bindView(view, context, cursor); 
      TextView tv1 = (TextView)view.findViewById(R.id.tv1); 
      TextView tv2 = (TextView)view.findViewById(R.id.tv2); 

      int index1 = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID); 
      int index2 = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA); 

      tv1.setText(cursor.getString(index1)); 
      tv2.setText(cursor.getString(index2)); 
     } 

    } 
} 

XML:

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

    <TextView 
     android:id="@+id/tv1" 
     android:layout_width="50dp" 
     android:layout_height="wrap_content" 
     android:text="text1"/> 

    <TextView 
     android:id="@+id/tv2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="text2"/> 

</LinearLayout> 

回答

0

使用的GridView與android:numColumns="2"示例:從A到Z的GridView在佈局

顯示字符。很簡單,它應該是有說服力的。

1.1 Android的佈局文件 - RES /佈局/ main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView1" 
    android:numColumns="2" 
    android:gravity="center" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

</GridView> 

1.2活動

package com.mkyong.android; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.GridView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.view.View; 
import android.widget.AdapterView.OnItemClickListener; 

public class GridViewActivity extends Activity { 

    GridView gridView; 

    static final String[] numbers = new String[] { 
      "A", "B", "C", "D", "E", 
      "F", "G", "H", "I", "J", 
      "K", "L", "M", "N", "O", 
      "P", "Q", "R", "S", "T", 
      "U", "V", "W", "X", "Y", "Z"}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

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

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, numbers); 

     gridView.setAdapter(adapter); 

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

    } 

} 

您還可以通過編程方式在GridView在下列方式設置的列數:

gridview.setNumColumns(n); 
0

可以不使用xml創建佈局,但你不應該。我會告訴你另一個問題。 Android - Create app with pure Java and no XML?您有避免XML佈局以及Android規範的具體原因嗎?

+0

我希望爲每個用戶輸入動態創建列,但XML UI元素是靜態創建的。 – lucky1928