2

リストビューの各行の右側に3つのアイコンを設定したい.リストビューのユーザーが任意の製品を選択したときに、ユーザーがアイコンを選択した場合のように3つの方法で製品を見ることができるショッピングアプリを作成しています1 ユーザーはグリッド ビューで製品を見ることができ、ユーザーがアイコン 2 を選択すると、ユーザーは画像スイッチャーで製品を見ることができ、アイコン 3 ユーザーは実際にリスト ビューで製品を見ることができます。ユーザーがグリッドビューのアイコンを選択した場合のように、次のアクティビティが開き、次のアクティビティがグリッドビューで開きます。これが私のコードです

public class ListViewSupplementActivityActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.listlayout);
ListView view = (ListView) findViewById(R.id.list);
view.setAdapter(new CustomImageListAapter(this));

view.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
if(position ==0)
{    
Intent ii = new Intent(ListViewSupplementActivityActivity.this,SingleListItem.class);

ii.putExtra("operation", position);
startActivity(ii);                                                           
}
if(position ==1){    
Intent in = new Intent(ListViewSupplementActivityActivity.this,Test.class);

in.putExtra("operation", position);
startActivity(in);
}
if(position == 5){
Intent in2= new               Intent(ListViewSupplementActivityActivity.this,FullImageActivity.class);       
Bundle bundle = new Bundle();
bundle.putInt("operation", position);
in2.putExtras(bundle);   
startActivity(buse); }

}  


});
}
}

これはカスタム アダプター クラスです。

public class CustomImageListAapter extends BaseAdapter {

private int[] images = {R.drawable.autumnwalk, R.drawable.bridge,R.drawable.butterfly,               
R.drawable.cheetah, R.drawable.cloud, R.drawable.su, R.drawable.wi,
R.drawable.rocksculpture, R.drawable.skyatsunset, R.drawable.s,
R.drawable.smoke, R.drawable.tulips};

private String[] imageDesc = { "Autumn Walk", "Bridge",
"Butterfly", "Cheetah", "Cloud", "Highway", "Martini", 
"Rock Sculpture", "Sky at Sunset", "Sliced Orange", "Smoke",
"Tulips"};

private Context ctx = null;

public CustomImageListAapter(Context context) {
this.ctx = context;
}

public int getCount() {
return images.length;
}

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

public long getItemId(int position) {
return 0;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {

ImageView imgView = new ImageView(this.ctx);
imgView.setScaleType(ScaleType.FIT_CENTER);
imgView.setPadding(8, 8, 8, 8);
imgView.setImageResource(images[arg0]);
imgView.setAdjustViewBounds(Boolean.TRUE);
imgView.setContentDescription(imageDesc[arg0]);
imgView.setMaxHeight(200);
imgView.setMaxWidth(200);

TextView tv = new TextView(this.ctx);
tv.setText(imageDesc[arg0]);
tv.setMaxHeight(100);
tv.setTypeface(Typeface.DEFAULT, Typeface.BOLD);
tv.setGravity(Gravity.CENTER);


LinearLayout layoutView = new LinearLayout(this.ctx);
layoutView.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(150, 150);
layoutView.addView(imgView, params1);
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
layoutView.addView(tv, params2);

return layoutView;}

}
4

3 に答える 3

1

リスト アイテム行の xml レイアウト ファイルを定義して使用します。行には、他のビューとともに右側に 4 つのImageViewが含まれます。そして、これを各行のレイアウトとして使用します。クラス内の位置に基づいて、CustomAdapter各行への参照を取得できます。

ここで、この xml レイアウトを CustomAdapter のリスト アイテム行にgetView()拡張ます。

于 2012-09-04T12:01:24.883 に答える
0

プログラムでそれを行う時間を節約するために、次のように行うことができます。

  • list_view_item xmlファイルを作成します(各ビューアイテムを表します)。柔軟な位置合わせを行うには、を使用する必要がありますRelativeLayout
  • アレイアダプタで上記のxmlレイアウトを膨らませます

(1)list_view_item.xmlアイテムレイアウト用に作成:

  • 重要な作業は、最初のアイテムを親ビューの右側に設定することです。android:layout_alignParentRight="true"

  • 次に、次のアイテムが前のアイテムと整列されます。android:layout_alignParentLeft="@+id/id_of_prev_item"

(3つの画像用に編集:)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/img1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />

    <ImageView
        android:id="@+id/img2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="@+id/img1" />

    <ImageView
        android:id="@+id/img3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="@+id/img2" />

    <TextView
        android:id="@+id/description"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="@+id/img3"
        android:fadingEdge="vertical" />

</RelativeLayout>

(2)アイテムのレイアウトを次のように膨らませますCustomImageListAapter

提案:CustomImageListAapterクラスArrayAdapter<T>をデータ項目のより具体的な使用に拡張し、コードをより包括的にします。

public class CustomImageListAapter extend ArrayAdapter<YourDataItem>
{
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        int item_view_id = R.layout.list_view_item;

        LinearLayout holderView = new LinearLayout(getContext());
        String inflaterName = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(inflaterName );
        inflater.inflate(item_view_id, holderView, true);

        //YourDataItem: is your class represent each row on your database
        YourDataItem item = getItem(position);

        //TODO: do your stuff of works with your view item and data here

        return holderView;
    }
}
于 2012-09-04T12:51:46.303 に答える
0

リストビューのカスタムビューを作成するか、そのためのxmlファイルを作成して、後でアダプタークラスで膨らませることができます。

ここのように、2 つの TextView を含む xml ファイルを作成しました。

public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder holder;

            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.two_text, null);

                holder = new ViewHolder();

                holder.text1 = (TextView) convertView

                .findViewById(R.id.TextView01);

                holder.text2 = (TextView) convertView

                .findViewById(R.id.TextView02);

                convertView.setTag(holder);

            } else {

                holder = (ViewHolder) convertView.getTag();

            }

            holder.text1.setText(CountriesList.abbreviations[position]);

            holder.text2.setText(CountriesList.countries[position]);

            return convertView;

        }
于 2012-09-04T12:06:33.490 に答える