【发布时间】:2015-05-02 23:46:20
【问题描述】:
我有一个包含进度条的 ListView,我想在线程中显示和隐藏进度条,这是我的代码:
public void onClick(View v) {
if (v.getId() == R.id.ib_add_file) {
Intent intent = new Intent(this, FilePickerActivity.class);
startActivityForResult(intent, REQUEST_PICK_FILE);
}
}
当我选择一个文件时,它将被添加到 ListView 并开始上传:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_PICK_FILE:
if (data.hasExtra(FilePickerActivity.EXTRA_FILE_PATH)) {
File file = new File(data.getStringExtra(FilePickerActivity.EXTRA_FILE_PATH));
Fichier fichier = new Fichier();
fichier.setFile(file);
ArrayAdapter<Message> adapter = (ArrayAdapter<Message>) chat_list.getAdapter();
adapter.add(fichier);
int pos = adapter.getCount() - 1;
MessageHolder holder = (MessageHolder) getViewByPosition(pos, chat_list).getTag();
Log.i("Fichier", holder.fichier.getText().toString());
//the log is showing the right file name
holder.progress.setVisibility(View.VISIBLE);
//the progressBar isn't showing !
Log.i("ProgressBar", (holder.progress.getVisibility() == View.VISIBLE)? "Visible":"invisible");
//the log is showing Visible !!!
}
}
}
}
我正在使用从 answer 获得的这个函数来从 ListView 中获取添加的行来处理 ProgressBar:
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MessageHolder msgHolder = null;
Message msg = data.get(position);
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
msgHolder = new MessageHolder();
msgHolder.fichier = (TextView) row.findViewById(R.id.tv_fichier);
msgHolder.iconFichier = (ImageView) row.findViewById(R.id.iv_icon_fichier);
msgHolder.progress = (ProgressBar) row.findViewById(R.id.pb_fichier);
row.setTag(msgHolder);
//msgHolder.handler = new ProgressBarHandler(msgHolder.progress);
} else {
msgHolder = (MessageHolder) row.getTag();
}
Fichier fich = (Fichier) msg;
msgHolder.fichier.setText(fich.getNomFichier());
msgHolder.fichier.setPaintFlags(msgHolder.fichier.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
msgHolder.iconFichier.setImageResource(fichier.getIconFichier());
return row;
}
private static class MessageHolder {
ImageView iconFichier;
TextView fichier;
ProgressBar progress;
ProgressBarHandler handler;
}
这是我的列表视图行的 xml:
<ImageView
android:id="@+id/iv_icon_fichier"
style="@style/AvatarImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:contentDescription="@string/descThumbnail"
android:scaleType="centerCrop" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/iv_icon_fichier"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_fichier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="22sp"
android:text="Fichier" />
<ProgressBar
android:id="@+id/pb_fichier"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:max="100"
android:minWidth="200dp"
android:progress="0"
android:visibility="gone"/>
</LinearLayout>
为什么我的 ProgressBar 没有显示?
代码已编辑:我意识到我的问题与处理程序无关,我尝试直接从我的 onActivityResult 方法显示 ProgressBar,但它没有显示!
【问题讨论】:
-
试试这个
public ProgressBarHandler(ProgressBar progressBar) {super(Looper.getMainLooper()); this.progressBar = progressBar; }看看有没有帮助 -
感谢您的回复,我已经编辑了我的代码,我的问题与 Handler 无关,看看我新的 onActivityResult 代码。
-
你试过设置进度吗?比如:holder.progress.setProgress(50);
-
它也不起作用......
-
是的,它不起作用我只是忘记了,我从来没有关注过其他帖子。我会尝试发布答案好的先生
标签: android android-progressbar