0

私はSQLiteデータベースを持っていて、ListViewにすべての要素を表示したいと思います。しかし、私はすべての行をクリック可能にしたいです。これを行う方法?コードは次のとおりです。次に..別の質問..オプションメニューから起動できるアクティビティがあり、データベースにデータを追加または削除します。このアクティビティに戻ったときにリストを自動更新したいと思います。コードを変更するにはどうすればよいですか?

public class WorkflowChoice extends Activity {

private static final int INIT_JADE_PROFILE = 0;
private static final int MANAGE_DATABASE = 1;
private static final int MODIFY_FILES = 2;
private static final int CHANGE_THEME = 3;
private static final int SHOW_OUTPUT_WORKFLOW = 4;
private LinearLayout properties_container;

private MyDatabase db;
TextView wfsTv;
ListView wfsLv;
private Cursor c;

public MyDatabase getDb() {
    return db;
}
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.choice);

    properties_container = (LinearLayout ) findViewById(R.id.properties_container);

    String host = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_host), getString(R.string.default_host));
    String port = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_port), getString(R.string.default_port));

    wfsTv=(TextView)findViewById(R.id.wfsTv);
    ListView wfsLv = (ListView)findViewById(R.id.wfsLv);

    db=new MyDatabase(getApplicationContext());
db.open();  //apriamo il db


if(db.fetchWfs().getCount()==0){//inserimento dati, solo se il db è vuoto

        db.insertWf("WF1", "class1");
        db.insertWf("WF2", "class2");
        db.insertWf("WF3", "class3");
        db.insertWf("WF4", "class4");
        db.insertWf("WF5", "class5"); 

}

c=db.fetchWfs(); // query
startManagingCursor(c);

SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                this, 
                R.layout.wfs, //il layout di ogni riga/prodotto 
                c, 
                new String[]{MyDatabase.WfMetaData.ID,MyDatabase.WfMetaData.WF_NAME_KEY,MyDatabase.WfMetaData.WF_CLASS_KEY},//questi colonne 
                new int[]{R.id.IDTv,R.id.nameTv,R.id.classTv});//in queste views

wfsLv.setAdapter(adapter); //la listview ha questo adapter


//qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview

int nameCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_NAME_KEY);  //indici delle colonne
int classCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_CLASS_KEY);       

if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
        do {

                wfsTv.append("Wf Name:"+c.getString(nameCol)+", Class:"+c.getString(classCol)+"\n"); //estrazione dei dati dalla entry del cursor

                } while (c.moveToNext());//iteriamo al prossimo elemento
}

db.close();
getWindow().setFormat(PixelFormat.RGBA_8888);   //visto che usiamo i gradient, usiamo questo trick (vedi snippet forum)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);  

//wfsLv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
//wfsTv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
//definizione ed uso di gradient in modo programmatico


//animazioni in modo programmatico (vedi snippet forum)
Animation a1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
a1.setDuration(1000);
a1.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
wfsLv.startAnimation(a1);
//entra da sotto


Animation a2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
a2.setDuration(1000);
a2.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
wfsTv.startAnimation(a2);
//entra da sopra


wfsLv.setClickable(true);
//e affidiamo la gestione del tap/click ad un apposito listener, che ci permetterà di agire sull’elemento cliccato e ricaricare la nostra lista

wfsLv.setOnItemClickListener
       (new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
          View v, int position, long id) {
 TextView txtId = (TextView)
          v.findViewById(R.id.wfsTv); 
 c.requery(); 
}
       });

/*wfsTv.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            CharSequence text = "Workflow scelto!";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(getApplicationContext(), text, duration);
            toast.show();

        }
    });*/



    TextView masterTv = (TextView)findViewById(R.id.masterTv);
    masterTv.setText("Master");
    masterTv.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startSubActivity();

        }
    });
}
private void startSubActivity(){
Intent intent = new Intent(this, ConfigChoice.class);
startActivity(intent);
}
4

4 に答える 4

1

AndroidドキュメントのListViewチュートリアルに例があります:http://developer.android.com/resources/tutorials/views/hello-listview.html

于 2012-05-10T10:54:40.627 に答える
1

このコードを試してください:

wfsLv.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {

  }
});
于 2012-05-10T10:55:57.723 に答える
0

あなたの最初の質問のために私は持っています

  list.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,long id) {

// here you will get **position** of the item in the list which you can use gor updation/deletion

                }


            });

そして2番目の質問のために

2番目の質問を書く-

リストビューの初期化コードをonResume()メソッドに記述して、このアクティビティに戻るたびに呼び出されるようにします。

于 2012-05-10T11:01:04.083 に答える
0

リストビューの行としてxmlファイルを使用しています。xmlファイルで、最も外側のレイアウトを次のように設定します

android:clickable="true"

そしてあなたのすべての子供は

android:clickable="false"

それがうまくいくことを願ってこのことを試してください。

その後、setonitemclicklistenerで聞くことができます

于 2012-05-10T11:01:38.873 に答える