2

カスタマイズされたリストビューを使用しているアプリを開発しています。最初にコードを使用し、質問をします(下部)。

Main.java (アダプタ クラスを使用してデータをリストビューに設定)

Myadapter adapter = new Myadapter();
    listview.setAdapter(adapter);

}

custom.xml

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Large Text"
    android:background="#adadad"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    <TextView
        android:id="@+id/textView4"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

Myadapter クラス:

     public class Myadapter extends BaseAdapter{

    public int getCount() {
        // TODO Auto-generated method stub
        return startarr.size();
    }

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

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

    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = null;
        int i;
        LayoutInflater layoutinflater = getLayoutInflater();
        v = layoutinflater.inflate(R.layout.custom,null);
        TextView aptdate = (TextView)v.findViewById(R.id.textView1);
        TextView apttime = (TextView)v.findViewById(R.id.textView2);
        TextView aptname = (TextView)v.findViewById(R.id.textView3);
        TextView aptid   = (TextView)v.findViewById(R.id.textView4);
        //Button btn = (Button)v.findViewById(R.id.button1);

        final String arlstdate[] = startarr.get(position).split("~");
        for (i = 0; i < arlstdate.length; i++) {
            aptdate.setText(arlstdate[i]);

            try {
                // Getting Array of Contacts
                JSONObject json = new JSONObject(response);
                contacts = json.getJSONArray("schedule");

                // looping through All Contacts
                for(int j = 0; j < contacts.length(); j++){
                    JSONObject c = contacts.getJSONObject(j);

                    // Storing each json item in variable
                    final String id = c.getString("scheduleId");
                    String startTime = c.getString("startDateTime");
                    String endTime = c.getString("endDateTime");
                    String type = c.getString("scheduleType");

                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                        Date startedTime = sdf.parse(startTime);
                        Date endedTime = sdf.parse(endTime);
                        int getstartdate = startedTime.getDate();
                        int getstartmonth = startedTime.getMonth();
                        int getstartyear = startedTime.getYear();
                        int getday = startedTime.getDay();
                        final int getstartingtime = startedTime.getHours();
                        final int getstartingmin = startedTime.getMinutes();
                                                    long diff = endedTime.getTime() - startedTime.getTime();
                        int hours = (int)(diff/(60*60*1000));
                        testselectID = String.valueOf(hours);

                        hoursarray.add(testselectID);
                        starttimearray.add(String.valueOf(getstartingtime+":"+getstartingmin));


                        calendar = Calendar.getInstance();
                        calendar.setTime(startedTime);

                        System.out.println((calendar.get(Calendar.YEAR))+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+(calendar.get(Calendar.DAY_OF_MONTH)));
                        if(arlstdate[i].equals((calendar.get(Calendar.YEAR))+"-"+(calendar.get(Calendar.MONTH)+1)+"-"+(calendar.get(Calendar.DAY_OF_MONTH))))
                        {
                            aptid.append(id+"\n");
                            apttime.append(testselectID+"Hrs"+"\n");
                            aptname.append((String.valueOf(getstartingtime+":"+getstartingmin))+"\n");

                        }

                }

        }catch (Exception e) {
            // TODO: handle exception
            Toast.makeText(getBaseContext(), "schedule error is " + e, Toast.LENGTH_SHORT).show();
        }
            }

        return v;


 }
    }

ここで、データを textviews に追加しています。次のコードの出力は ... ここに画像の説明を入力\

ここまではすべてうまくいきます。しかし、私の質問は何ですか.....

カスタム リスト ビューをクリックすると、値が別のトースト メッセージに表示される必要があります。リスト ビューのクリック リスナーに関するいくつかのアイデアがありますが、ここでそのコードを使用すると、最後に追加されたデータの詳細が取得されます。たとえば、最初のもの (画像) をクリックすると、16:40 が表示されます。12:0 は表示されません。私が欲しいのは、異なるトーストメッセージで2つを異なる方法で表示する必要があるということです。

誰でもこれで私を助けることができます....

4

2 に答える 2

2

適切なモデルを実装しないことで、自分の生活を非常に困難にしています。アダプターの外部で Json を解析し、これらの情報から Java クラスを作成する必要があります。次に、List または Array をデータとしてアダプタに渡し、Model オブジェクトをgetItem(position)!で返します。このようにして、必要なデータを完璧に実装しOnItemClickListenerて収集できます。

また、パラメーターを完全に無視しconvertViewます。パフォーマンスを最適化するために null でない場合は、新しいビューをインフレートする代わりに、このビューを取得する必要があります。

于 2012-11-06T09:39:25.787 に答える
0
for that you have to implement the OnItemClickListener event on listview .

listview.OnItemClickListener(new OnItemClickListener(){
    @Override
        public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    // getting values from selected ListItem

       }
   });
 Now you have position of your listview then Whatever the list position that corresponding value is diplays in toast.
于 2012-11-06T11:09:53.297 に答える