1

その位置で押したときに消えた画像を表示し、その行の書体を変更したいというリストを表示しようとしています。したがって、最初に単純なリストを含むxmlファイルがあり、次に各行に別のxmlがあります。これは次のとおりです。

<ImageView
    android:id="@+id/icono"
    android:layout_gravity="center"
    android:layout_marginRight="5dip"/>

<RelativeLayout
    android:id="@+id/RelativeLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_centerVertical="true"
        android:text="TextView" />

    <ImageView
        android:id="@+id/image_tick_ingred"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="false"
        android:layout_alignParentLeft="false"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="false"
        android:layout_alignRight="@id/textView1"
        android:layout_centerVertical="true"
        android:src="@android:drawable/presence_online" />
</RelativeLayout>

これが各行のコードであり、左側に画像、次にテキスト、最後に行の右側に別の画像が含まれています。そしてJavaコード:

public class TabIngred extends ListActivity {

    ImageView img;

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.rellenas_ingr); //the list xml layout

        Bundle extras = getIntent().getExtras(); //get data
        if (extras != null) {
            String ingredientesLista[] = extras.getStringArray("ingredientesLista");
            int[] ingredientesImagen=extras.getIntArray("ingredientesImagen");

            setListAdapter (new IngredienteAdapter(this, R.layout.rellenas_ingr_fila, ingredientesLista, ingredientesImagen));
            getListView().setChoiceMode(2);
        }

}

private class IngredienteAdapter extends ArrayAdapter<String>{

    private String listaIngred[];
    private int[] listaImagenes;

    public IngredienteAdapter(Context context, int textViewResourceId, String ingredientesLista[], int[] ingredientesImagen) {
        super(context, textViewResourceId, ingredientesLista);
        this.listaIngred = ingredientesLista;
        this.listaImagenes=ingredientesImagen;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // XML de la vista de la fila
            v = vi.inflate(R.layout.rellenas_ingr_fila, null); //the row for the listview
        }
        String ingred = listaIngred[position];
        int imagen=listaImagenes[position];
        int tickImagen = R.drawable.tick_ingred;//set the image to a tick 


        if (ingred != null) {
            TextView ttitulo = (TextView) v.findViewById(R.id.textView1);
            if (ttitulo != null) {
                ttitulo.setText(ingred);
            }
            ImageView timagen = (ImageView) v.findViewById(R.id.icono);
            if (timagen != null) {
                timagen.setImageResource(imagen);
            }
            ImageView ttick = (ImageView) v.findViewById(R.id.image_tick_ingred);
            if (ttick != null) {
                ttick.setImageResource(tickImagen);
                ttick.setVisibility(View.GONE);
            }
        }   
        return v;
    }
}

 @Override
 public void onListItemClick(ListView l, View v, int position, long id) {

     img=(ImageView)v.findViewById(R.id.image_tick_ingred);
     TextView t= (TextView)v.findViewById(R.id.textView1);

     if(img.getVisibility()==View.GONE){

         t.setTypeface(null, Typeface.BOLD);
         img.setVisibility(View.VISIBLE);

     }else {
         t.setTypeface(null, Typeface.NORMAL);
         img.setVisibility(View.GONE);

     }
 }
}

したがって、getview()を定義し、画像を配置します(これは機能します)が、OnlistItemClick()は機能しません。最初にアイテムを選択したとき、画像は表示されず、そのために最初の行を押した位置は、押したアイテムではなく、書体を変更する位置になります。

ありがとう :)

4

2 に答える 2

0

あなたの中であなたonListItemClickは使用する必要がありますView

例えば:

img=(ImageView)findViewById(R.id.image_tick_ingred);
 TextView t= (TextView)findViewById(R.id.textView1);

する必要があります

img=(ImageView)v.findViewById(R.id.image_tick_ingred);
 TextView t= (TextView)v.findViewById(R.id.textView1);

vクリックされた行のビューであることに注意してください

于 2012-08-13T17:33:32.110 に答える
0

問題は、getListView()。setChoiceMode(2);を定義することでした。それがうまくいかないので、行を削除して完璧に動作します!!

やっぱりありがとう!

于 2012-08-21T15:41:57.413 に答える