0

私はAndroidプロジェクトに取り組んでいます。http://www.vogella.com/articles/AndroidSQLite/article.htmlのチュートリアルに従っていますが、何かに引っかかっています。チュートリアルでは、1 つの String オブジェクトで Class を使用する方法を示します。私は2つの文字列オブジェクトを扱っています。だから私はいくつかのことを変更しました (私のクラスに新しい文字列を追加し、layout.simple_list_item_1 を android.R.layout.simple_list_item_2 に変更するなど)。 1個しかないのでダメです)。

クラス・ストリキ

public class Stoliki {
      private long id;
      private String numer;
      private String opis;

      public long getId() {
        return id;
      }

      public void setId(long id) {
        this.id = id;
      }

      public String getNumer() {
        return numer;
      }

      public void setNumer(String numer) {
        this.numer = numer;
      }

      public String getOpis() {
            return opis;
        }

      public void setOpis(String opis) {
            this.opis = opis;
        }

    } 

アクティビティ

import android.app.ListActivity;
import android.os.Bundle;
import java.util.List;
import java.util.Random;
import android.view.View;
import android.widget.ArrayAdapter;

public class FirstGridPage extends ListActivity {
      private StolikiDataSource datasource;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_list_stoliki);

    datasource = new StolikiDataSource(this);
    datasource.open();

    List<Stoliki> values = datasource.getAllStoliki();

    // Use the SimpleCursorAdapter to show the
    // elements in a ListView
    ArrayAdapter<Stoliki> adapter = new ArrayAdapter<Stoliki>(this,
        android.R.layout.simple_list_item_1, values);
    setListAdapter(adapter);
  }

  // Will be called via the onClick attribute
  // of the buttons in main.xml
  public void onClick(View view) {
    @SuppressWarnings("unchecked")
    ArrayAdapter<Stoliki> adapter = (ArrayAdapter<Stoliki>) getListAdapter();
    Stoliki stolik = null;
    switch (view.getId()) {
    case R.id.add:
      String[] stoliki_numer = new String[] { "1", "2", "3" };
      String[] stoliki_opis = new String[] { "Czerwony", "Niebieski", "Zielony" };
      int nextInt = new Random().nextInt(3);
      // Save the new comment to the database
      stolik = datasource.createStolik(stoliki_numer[nextInt], stoliki_opis[nextInt]);
      adapter.add(stolik);
      break;
    case R.id.delete:
      if (getListAdapter().getCount() > 0) {
          stolik = (Stoliki) getListAdapter().getItem(0);
        datasource.deleteStolik(stolik);
        adapter.remove(stolik);
      }
      break;
    }
    adapter.notifyDataSetChanged();
  }

  @Override
  protected void onResume() {
    datasource.open();
    super.onResume();
  }

  @Override
  protected void onPause() {
    datasource.close();
    super.onPause();
  }

} 
4

1 に答える 1

1

http://www.youtube.com/watch?v=wDBM6wVEO70。Romain guy (google の android 開発者) による Listview トーク。

Main.xml

<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:focusableInTouchMode="false"
 android:listSelector="@android:color/transparent"
 android:layout_weight="2"
 android:headerDividersEnabled="false"
 android:footerDividersEnabled="false"
 android:dividerHeight="8dp" 
 android:divider="#000000"   
 android:cacheColorHint="#000000" 
 android:drawSelectorOnTop="false">
 </ListView>
 </LinearLayout>   

カスタム行。行.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"
   android:background="#ffffff"
  >

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="TextView" 
    android:background="@drawable/itembkg"
    />

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:text="TextView" />

 </LinearLayout>

public class CustomListView extends Activity {
/** Called when the activity is first created. */

 ListView lv1;
 Customlistadapter cus;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
   // Button b= (Button) findViewById(R.id.remove);
    lv1 = (ListView) findViewById(R.id.list);
    cus= new Customlistadapter(this);
    lv1.setAdapter(cus);

}        
   }

カスタム リスト アダプター。各行のカスタム レイアウトを拡張します。

 public class Customlistadapter extends ArrayAdapter {

private LayoutInflater mInflater;
    Context c;

public Customlistadapter(CustomListView customListView) {
    super(customListView, 0);
    // TODO Auto-generated constructor stub
    this.mInflater = LayoutInflater.from(customListView);  
    c=customListView;
}
public int getCount() {
    return 20; // number of listview rows.
}

public Object getItem(int arg0) {
    return arg0;
}

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

public View getView(final int arg0, View arg1, ViewGroup arg2) {
    final ViewHolder vh;
    vh= new ViewHolder();

    if(arg1==null )
     {
        arg1=mInflater.inflate(R.layout.row, arg2,false);
        vh.tv1= (TextView)arg1.findViewById(R.id.textView1);
        vh.tv2= (TextView)arg1.findViewById(R.id.textView2);
     }
    else
    {
     arg1.setTag(vh);
    }
        vh.tv1.setText("hello");    
        vh.tv2.setText("hello");

    return arg1;
}

  static class ViewHolder //use a viewholder for smooth scrolling and performance.
  {
TextView tv1,tv2;

 }
 }

編集:

アクティビティにはリストビューがあります。これは oncreate setContentView(R.layout.activity_main); で設定されます。メイン レイアウトにはリストビューがあります。listview のアダプターを listview.setAdapter(youradapter); として設定します。

次に、リストビューにはカスタムレイアウト、つまり行アイテムごとにrow.xmlが膨らみます。listview のカスタム アダプターは、row.xml が膨張する場所です。ArrayAdapter を拡張するクラス CustomAdapter を定義しました。メソッドのセットをオーバーライドします。

   getCount() ---  size of listview.
   getItem(int position) -- returns the position 
   getView(int position, View convertView, ViewGroup parent) 
   // position is the position in the listview.
   //convertview - view that is tobe inflated
   // you will return the view that is infated. 

スムーズなスクロールとパフォーマンスのために、ビューホルダーを使用する必要があります。1000 行がイメージを含む lstview であると想像してください。メモリ例外が発生する可能性があります。これを取り除く 1 つの方法は、ビューをリサイクルすることです。表示されているビュー (行) はリサイクルされません。上部のリンクのビデオには、トピックに関する詳細な説明があります

activity_main.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="vertical" 
 android:background="#0095FF">

 <ListView android:id="@+id/list"
  android:layout_width="fill_parent"
  android:layout_height="0dip"
  android:focusableInTouchMode="false"
  android:listSelector="@android:color/transparent"
  android:layout_weight="2"
  android:headerDividersEnabled="false"
  android:footerDividersEnabled="false"
  android:dividerHeight="8dp" 
  android:divider="#000000" 
  android:cacheColorHint="#000000"
  android:drawSelectorOnTop="false">
  </ListView>
 </LinearLayout>

row.xml (リストビュー行ごとに膨張したレイアウト)

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

 <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Header" />

 <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="80dp"
    android:layout_gravity="center"
    android:text="TextView" />

</LinearLayout>

主な活動

   public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView ll = (ListView) findViewById(R.id.list);
    CustomAdapter cus = new CustomAdapter();
    ll.setAdapter(cus);

}

class CustomAdapter extends BaseAdapter
{
    LayoutInflater mInflater;


    public CustomAdapter()
    {
        mInflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 30;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        final ViewHolder vh;
        vh= new ViewHolder();

        if(convertView==null )
         {
            convertView=mInflater.inflate(R.layout.row, parent,false);

            vh.tv2= (TextView)convertView.findViewById(R.id.textView2);
            vh.tv1= (TextView)convertView.findViewById(R.id.textView2);


         }
        else
        {
         convertView.setTag(vh);
        }
            vh.tv1.setText("my text");
            vh.tv2.setText("Postion = "+position);  
        return convertView;
    }

 class ViewHolder
 {
    TextView tv1,tv2;
 }  
 }
}

ここに画像の説明を入力

于 2013-04-10T09:18:47.897 に答える