0

これから、行の制御と強調表示について尋ねました答えの 1 つはカスタム アダプターに基づくもので、これを行う方法に関する一連のリンクが提供されました。これを回避しようとしているときに、リンクされた投稿にリストされているように、最初にヌルポインター例外を取得するという問題に遭遇しました。getview メソッドがこの原因であることがすぐに判明し、この問題に関する他の投稿を読んで解決しようとしました。これまでのところエラーは停止していますが、リストビューは空です。私のアクティビティはリストビューを拡張しており、コードはファイル エクスプローラーの作成に関するこの記事に基づいています:ファイル エクスプローラー リンク

この例の GetDir メソッドでカスタム アダプターを呼び出し、getview で次のようにします。

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

    View viewnull = convertView;
    if (viewnull == null) {
        LayoutInflater vrow;
        vrow = LayoutInflater.from(getContext());

        viewnull = vrow.inflate(R.layout.row, null);

    }

    if (currpos == position) {
        ((TextView)viewnull).setBackgroundColor(Color.BLUE);
    }

    return viewnull;

}

リストの実際のビューをカスタマイズするつもりはないので、フォルダーとファイルをリストし、他の投稿で指定されたコードが機能することを許可する必要があるだけですが、リストが機能するようになるまで、私はこれ以上先に進むことができません。

編集 アダプターは次のように設定されています。

 fl = new FileListAdapter(this,R.layout.row,itemi);

         setListAdapter(fl);

次のように、getview 内でテキスト ビューを設定しようとしました。

TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);

編集 2 アダプタ コード全体:

 public class FileListAdapter extends ArrayAdapter<String>  {

         private List<String> itemsll; // Probably not needed


            public FileListAdapter(Context context, int row,
                    List<String> iteml) {
                super(context,row,iteml);
                // TODO Auto-generated constructor stub
                this.itemsll = iteml; // like wise probably not needed
            }

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

                View viewnull = convertView;
                if (viewnull == null) {
                    LayoutInflater vrow;
                    vrow = LayoutInflater.from(getContext());

                    viewnull = vrow.inflate(R.layout.row, null);



                    String currow =     itemsll.get(position);
                    TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);



                }

                if (currpos == position) {
                    ((TextView)viewnull).setBackgroundColor(Color.BLUE);
            }

                return viewnull;

            }





            public void setSelectedPosition( int pos )
            {
                currpos = pos; // selectedPos is global variable to handle clicked position
                // inform the view of this change
                notifyDataSetChanged();
            }

          }

編集 3: getDiri メソッド:

private void getdiri(String dirpathi) {
         mypathi.setText("Current Folder:"+dirpathi);
         getcurpathi = dirpathi;
         itemi = new ArrayList<String>();
         pathi = new ArrayList<String>();
         fullpathi = new ArrayList<String>();
         File fi = new File(dirpathi);

         File[] filesi = fi.listFiles();

         if(!dirpathi.equals(rooti))
         {
          itemi.add(rooti);
          pathi.add(rooti);
          itemi.add("../");
          pathi.add(fi.getParent()); 
         }

         for(int i=0; i < filesi.length; i++)
         {
          File filei = filesi[i];
          if(!filei.isHidden() && filei.canRead()){

              if(filei.isDirectory()){
                pathi.add(filei.getPath());
                itemi.add(filei.getName() + "/");

              } else {

                  itemi.add(filei.getName());
                  pathi.add(filei.getName());


              }
          } 
         }

         fl = new FileListAdapter(this,R.layout.row,itemi);

         setListAdapter(fl);

     }

編集4: この問題に加えて、リストにフォルダーまたはファイルの説明が表示されていないことがわかりました。行は空白ですが、クリックすると、フォルダーに移動します。

編集5: getview にコードを追加

以下を追加しました。

rowtext.setText(currow);

後 :

String currow =     itemsll.get(position);
 TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);

しかし、リストは表示されますが、複数のファイルが含まれるフォルダーに移動すると、ファイルとフォルダーが重複しているように見えます。

EDIT 6:今それを整理し、 getView メソッド全体が次のようになりました:

public class FileListAdapter extends ArrayAdapter<String>  {

         private List<String> itemsll; 


            public FileListAdapter(Context context, int row,
                    List<String> iteml) {
                super(context,row,iteml);
                // TODO Auto-generated constructor stub
                this.itemsll = iteml;
            }

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

                View viewnull = convertView;
                if (viewnull == null) {
                    LayoutInflater vrow;
                    vrow = LayoutInflater.from(getContext());

                    viewnull = vrow.inflate(R.layout.row, null);

                }
                String currow =     itemsll.get(position);
                TextView rowtext = (TextView)viewnull.findViewById(R.id.rowtext);
                rowtext.setText(currow);

                if (currpos == position) {
                    rowtext.setBackgroundColor(Color.BLUE);

                   }


                return viewnull;    


            }
4

0 に答える 0