2010-09-15 4 views
11

Привет, я новичок в Android. Может кто-нибудь сказать мне PLS, Что неправильно с помощью следующего кода:Создать ListView программно

public class ListApp extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView lText = new TextView(this); 
     lText.setId(0);  

     ListView lView = new ListView(this); 
     String[] lStr = new String[]{"AA","BB", "CC"}; 
     ArrayAdapter lAdap = new ArrayAdapter(this,lText.getId(),lStr); 
     lView.setAdapter(lAdap); 
     lView.setFocusableInTouchMode(true);   

     setContentView(lView); 
    } 
} 
+0

с одной стороны, вы неправильно используете конструктор ArrayAdapter. вы хотите использовать две версии параметров: (контекст контекста, int textViewResourceId) – moonlightcheese

+0

вот так: ArrayAdapter lAdap = новый ArrayAdapter (это, lText.getId()); – moonlightcheese

ответ

0
public class ListApp extends ListActivity 
+0

Могу ли я добавить активность вида ListView. Я не хочу наследовать ListActiviy. Является ли это возможным? – ashraf

+0

У меня такая же проблема, портирование проекта с iPhone и Blackberry, а использование XML для Android - это редизайн ... argh. Если это легко процедурно создать эти вещи, это сделает жизнь soooo намного проще и выглядит так, как это должно быть возможно, но эй, я все еще новичок в Android :) – sradforth

0

Сделайте XML файл макета с ListView и использовать findViewById, чтобы установить это адаптер после первой настройки вида контента макете

3

Попробуйте это.

Вставьте следующий код в list_item.xml.

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:textSize="16sp" android:textColor="#ffffff" android:textStyle="bold" android:background="@drawable/border_cell"> 
</TextView> 

Вот класс активности ....

public class UsersListActivity extends ListActivity{  
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState);   
      String[] statesList = {"listItem 1", "listItem 2", "listItem 3"}; 
      setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, 
        statesList)); 
      ListView lv = getListView(); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 


        Toast.makeText(getApplicationContext(), 
        "You selected : "+((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
      }); 

     } 

} 
1

Лучшая практика, чтобы отделить представление (XML макет) и контроллер (активность).

Если вы не хотите этого, попробуйте поставить

setContentView(lView); 

в начале OnCreate

18

вот решение, которое не требует, чтобы написать любые макеты XML. он использует стандартные макеты андроида, где это возможно, и нет необходимости в инфляции:

Dialog dialog = new Dialog(this); 
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setTitle("Select Color Mode"); 

ListView modeList = new ListView(this); 
String[] stringArray = new String[] { "Bright Mode", "Normal Mode" }; 
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray); 
modeList.setAdapter(modeAdapter); 

builder.setView(modeList); 
dialog = builder.create(); 
+2

игнорировать материал диалога. вы можете адаптировать его для работы с ListActivity. – moonlightcheese

+0

это должно быть отмечено как правильный ответ –

Смежные вопросы