2012-10-29 34 views
1

我從三天搜索得到答案。在我的應用程序中,我想用切換按鈕和文本視圖創建列表視圖。當我點擊列表項時,我想要去下一個活動。但是,當我點擊Toogle按鈕時,我需要顯示它處於關閉模式或模式。下面我添加我的代碼。列表視圖實現與文本vew和切換按鈕我=

$ 這是我的主要活動

public class MainActivity extends Activity { 

    int startminute; 
    int endminute; 

    Date date; 
    ToggleButton togg; 
    ListView lv; 
    String[] days = { "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", 
      "FRIDAY", "SATURDAY" }; 
    boolean[] onOff = new boolean[] { false, false, false, false, false, false, 
      false }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.listview); 
     if (savedInstanceState != null) { 
      onOff = savedInstanceState.getBooleanArray("status"); 
     } 
     lv = (ListView) findViewById(R.id.listView1); 
     lv.setAdapter(new MyAdapter()); 
     lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 

       Intent in = new Intent(MainActivity.this, StartAndEndTime.class); 
       in.putExtra("position", position); 
       startActivity(in); 

      } 
     }); 

    } 

    public class MyAdapter extends BaseAdapter { 

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

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

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

     @Override 
     public int getItemViewType(int position) { 

      return position; 
     } 

     @Override 
     public int getViewTypeCount() { 
      return days.length; 
     } 

     public View getView(final int position, View convertView, 
       ViewGroup parent) { 
      View v = null; 
      TextView arryText; 

      if (v == null) { 
       LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       v = vi.inflate(R.layout.inflate, null); 

       arryText = (TextView) v.findViewById(R.id.inflateText); 
       togg = (ToggleButton) v.findViewById(R.id.toggleButton1); 
       v.setTag(new ViewHolder(arryText, togg)); 

       togg.setOnClickListener(new OnClickListener() { 

        public void onClick(View v) { 


         if (togg.isChecked()) { 
          togg.setChecked(false); 
          onOff[position] = false; 

          Toast.makeText(MainActivity.this, "is off", 
            Toast.LENGTH_SHORT).show(); 

         } else { 

          onOff[position] = true; 
          togg.setChecked(true); 
          Toast.makeText(MainActivity.this, "is on", 
            Toast.LENGTH_SHORT).show(); 

         } 


        } 
       }); 

       arryText.setText(days[position]); 
       togg.setChecked(onOff[position]); 

      } 

      return v; 
     } 

    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBooleanArray("status", onOff); 
} 

任何一個能幫助我嗎?我希望你明白這裏的預期question.i我得到了很好的解決方案..

+0

使用setOnCheckedChangeListener而不是setOnClickListener,它會解決你的問題。 –

回答

1

更改getView方法這樣...

public View getView(final int position, View convertView, 
     ViewGroup parent) { 
    View v = null; 
    TextView arryText; 

    if (v == null) { 
     LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.inflate, null); 
    } 
     arryText = (TextView) v.findViewById(R.id.inflateText); 
     togg = (ToggleButton) v.findViewById(R.id.toggleButton1); 
     v.setTag(new ViewHolder(arryText, togg)); 

     togg.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 

        if (onOff[position]) { 
         togg.setChecked(false); 
         onOff[position] = false; 

         Toast.makeText(MainActivity.this, "is off", 
           Toast.LENGTH_SHORT).show(); 

        } else { 

         onOff[position] = true; 
         togg.setChecked(true); 
         Toast.makeText(MainActivity.this, "is on", 
           Toast.LENGTH_SHORT).show(); 

        } 

       } 
      }); 

     arryText.setText(days[position]); 
     togg.setChecked(onOff[position]); 



    return v; 
} 
+0

+1在你之前發佈的這個問題上的好答案..congrats –

+0

感謝你的回覆。我嘗試與你的解決方案,當我在切換按鈕我有響應「是」這很好。但是當我點擊關閉切換按鈕時,它顯示「是」。調試後,我認爲數組「onOff」不是每次編譯器進入 – user1716119

+0

其他{ onOff [position] = true; togg.setChecked(true); Toast.makeText(MainActivity.this,「is on」, Toast.LENGTH_SHORT).show(); } – user1716119

0

這樣做:

在構造:從活動傳入上下文到適配器類,並使用用於LayoutInflater相同的上下文:

mInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

在getView():

View v = null; 

if (convertView == null) { 
    v = mInflater.inflate(R.layout.demo_list, parent, false); 
} else { 
    v = convertView; 
} 

你得到了查看(V)現在,添加視圖/監聽器,然後返回!

return v;

0

問題可能與位置有關。試試這個代碼:

public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     View v = null; 
     TextView arryText; 
     final int rowPosition = position; 

     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.inflate, null); 

      arryText = (TextView) v.findViewById(R.id.inflateText); 
      togg = (ToggleButton) v.findViewById(R.id.toggleButton1); 
      v.setTag(new ViewHolder(arryText, togg)); 


      togg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      // Save the state here 
      onOff[rowPosition]= isChecked; 
       Toast.makeText(MainActivity.this, isChecked ? "is on" : "is off", 
           Toast.LENGTH_SHORT).show(); 
      } 
      }); 


      arryText.setText(days[rowPosition]); 
      togg.setChecked(onOff[rowPosition]); 

     } 

     return v; 
    } 
+0

感謝reply.i將通過該走了code.but如果我使用setOnCheckedChangeListener()它不能點擊 – user1716119

+0

好吧,如果你想嘗試使用onClick。重要的是final int rowPosition = position;從我的觀點。 – vandzi

+0

感謝它的工作後,我用點擊偵聽器..順便感謝了很多 – user1716119