2016-05-04 14 views
0

これらの行を/res/drawable/listview_main.xmlレイアウトに入れます:android:listSelector="@drawable/seletor2"とセレクタcreateam(ポルトガル語のseletor)。しかし何らかの理由でそれがうまくいかず、プログラムでリストビューセレクタを呼び出そうとしました。繰り返しますが、リストビュー内のアイテムをクリックしたときにセレクタが表示されません(まだ透明で、色はありません)。なぜこれが起こっているのか分かりません。また、私はlistview.setDrawSelectorOnTop(true);を書いています。助けが必要です。何らかの理由でリストビューセレクタが動作しない

listview_main.xml

<ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/shape2" 
      android:layout_weight="1" 


      android:paddingBottom="7dp" 
      android:layout_marginTop="3dp" 
     android:layout_marginBottom="3dp" 
      android:layout_marginLeft="0dp" 
      android:layout_marginRight="0dp" 
      android:divider="@color/red" 
      android:listSelector="@drawable/seletor2" 
      android:drawSelectorOnTop="true" 
       android:dividerHeight="2px" 
     /> 

seletor2

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/red" /> 
<item android:drawable="@android:color/transparent" /> 
</selector> 

活性

public class MainActivity extends Activity { 
    // Declare Variables 
    ListView listview; 
    ListViewAdapter adapter; 
    ProgressDialog mProgressDialog; 
    static String DEFINITION = "definition"; 
    static String WORD = "word"; 
    static String FLAG = "flag"; 
    EditText editsearch; 
    private List<WorldPopulation> worldpopulationlist = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     // Get the view from listview_main.xml 
     setContentView(R.layout.listview_main); 
     // Execute DownloadXML AsyncTask 
     new DownloadXML().execute(); 
    } 

    // DownloadXML AsyncTask 
    private class DownloadXML extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Create a progressdialog 
      mProgressDialog = new ProgressDialog(MainActivity.this); 
      // Set progressdialog title 
      mProgressDialog.setIcon(R.drawable.favicon); 
      mProgressDialog.setTitle("Search Parse"); 
      // Set progressdialog message 
      mProgressDialog.setMessage("Loading..."); 
      mProgressDialog.setIndeterminate(false); 
      // Show progressdialog 
      mProgressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // Create the array 
      worldpopulationlist = new ArrayList<WorldPopulation>(); 
      XMLParser parser = new XMLParser(); 
      // Retrive nodes from the given website URL in XMLParser.class 
      String xml = parser 
        .getXmlFromUrl("http://ecxmlparser.esy.es/br.xml"); 
      // Retrive DOM element 
      Document doc = parser.getDomElement(xml); 

      try { 
       // Locate the NodeList name 
       NodeList nl = doc.getElementsByTagName("vocabulary"); 
       for (int i = 0; i < nl.getLength(); i++) { 
        Element e = (Element) nl.item(i); 
        WorldPopulation map = new WorldPopulation(); 
        map.setDefinition(parser.getValue(e, DEFINITION)); 
        map.setWord(parser.getValue(e, WORD)); 
        map.setFlag(parser.getValue(e, FLAG)); 

        worldpopulationlist.add(map); 
       } 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void args) { 
      // Locate the listview in listview_main.xml 
      listview = (ListView) findViewById(R.id.listview); 

      // Pass the results into ListViewAdapter.java 
      Collections.sort(worldpopulationlist, new Comparator<WorldPopulation>() { 
       @Override 
       public int compare(WorldPopulation lhs, WorldPopulation rhs) { 
        return lhs.getWord().compareToIgnoreCase(rhs.getWord()); 
       } 
      }); 

      adapter = new ListViewAdapter(MainActivity.this, 
        worldpopulationlist); 
      // Binds the Adapter to the ListView 
      listview.setAdapter(adapter); 

      listview.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       Intent i = new Intent(MainActivity.this, SingleItemView.class); 


       WorldPopulation voc = (WorldPopulation) adapter.getItem(position); 



       i.putExtra("definition", voc.getDefinition()); 
       // Pass word 
       i.putExtra("word", voc.getWord()); 


       i.putExtra("flag", voc.getFlag()); 

       i.putExtra("position", position); 
       // Open SingleItemView.java Activity 
       startActivity(i); 

      } 

     }); 



      // Close the progressdialog 
      mProgressDialog.dismiss(); 
      // Locate the EditText in listview_main.xml 
      editsearch = (EditText) findViewById(R.id.search); 

      // Capture Text in EditText 
      editsearch.addTextChangedListener(new TextWatcher() { 

       @Override 
       public void afterTextChanged(Editable arg0) { 
        // TODO Auto-generated method stub 
        String text = editsearch.getText().toString() 
          .toLowerCase(Locale.getDefault()); 
        adapter.filter(text); 
       } 

       @Override 
       public void beforeTextChanged(CharSequence arg0, int arg1, 
         int arg2, int arg3) { 
        // TODO Auto-generated method stub 
       } 

       @Override 
       public void onTextChanged(CharSequence arg0, int arg1, 
         int arg2, int arg3) { 
        // TODO Auto-generated method stub 
       } 
      }); 
     } 
    } 
} 

ListViewAdapter

あなたがアイテムの他の状態を必要といけない原因
+0

あなたのセレクタからこの行を削除してみてください。<商品のandroid:state_window_focused = "false" のアンドロイド:state_selected = "true" を アンドロイド:描画可能= "@アンドロイド:カラー/透明" /> –

+0

@SandeepShabd私はこの行を削除し、それまだ動作しません! –

答えて

0

ただ、セレクタ

<item android:state_pressed="true" android:drawable="@color/red" /> 
<item android:drawable="@android:color/transparent" /> 

のためにこれを使用しています。 drawSelectorを真に設定します。 ListViewのsetOnItemClickListener()です。アダプターで使用しているレイアウトが、親レイアウトを拡張するためにクリック可能であってはならないことを確認してください。それ以外の場合は、OnItemClickのリストを傍受し、リストビューからOnItemClick呼び出しを受け取ることはありません。

+0

私は上記の私のポストを更新しました。あなたが言ったことをしてセレクタを書き直し、ListViewでsetOnItemClickListener()を実行しました。しかし、それは動作し続けません。すべてのitemsviewが表示され、クリック可能ですが、いずれかのアイテムをクリックすると、赤色は表示されません。なぜ私はまだ知りません! –

0

私は解決策を得ました。私はListViewAdapter:view.setBackgroundResource(R.drawable.seletor2);にこの行を入れて、今は正常に動作します!

関連する問題